<常用注解>
@Temporal(TemporalType.DATE) :指定日期时间的类型
@Transient:指定属性不需要映射
@Batch :批量操作
指定主键并自增
<1>、@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "gen")
@SequenceGenerator(name = "gen", sequenceName = "seqCarId", initialValue = 1, allocationSize = 1)
<2>、@Id
@GeneratedValue(generator="gen")
@GenericGenerator(strategy="uuid", name="gen")
//添加缓存机制
:region:寻找缓存名; usage(必须)说明了缓存的策略
@Cache(region="sampleCache1",usage=CacheConcurrencyStrategy.READ_WRITE)
@Version映射版本号属性,用于乐观锁
@Column指定属性对应的信息
<1>一对一单向外键(Annotation)
(1)注解
@OneToOne(cascade=CascadeType.All)
@JoinColumn(name="字段名",unique=true)
注意:保存时应该先保存外键对象,然后再保存主对象
<2>一对一双向外键关联(Annotation)
主控方:@OneToOne
被控方:@OneToOne(mappedbY="对方的关联属性名")
双向关联必配mappedBy属性,因为双向关联只能交给一方控制
<复合主键>
(1)、主键类必须实现serializable接口,重写hashCode()和equals()方法
(2)主键类:@Embeddable ;实体类 :@EmbeddedId
<3>一对一组件关联(Annotation)
组件类就是一个POJO类
实体类 @Embedded
<3>一对多映射关系
(1)、多对一单向外键(Annotation)
@ManyToOne(cascade={CascadeType.All},fetch=FetchType.EAGER)
@jOINColmn(name="字段名")
(2)、一对多单向外键(Annotation)
一方:
@ManyToOne(cascade={CascadeType.All},fetch=FetchType.LAZY)
@jOINColmn(name="字段名")
注意:多对一的时候,多方设置EAGER,一方设置LAZY
<4>多对多映射关系
(1)、多对多单向外键关联
其中一个多方持有另一个多方集合对象
创建一个中间表
@ManyToMany
@JoinTable(
name="teachers_students",
JoinColunms={@JoinColumnn(name="sid")},
inverseJoinColumns={@JoinColumn(name="tid")}
)
(2)、多对多双向外键关系
双方持有对方的集合对象,其中一方设置
@ManyToMany(mappedBy="students")
另一方
@ManyToMany
@JoinTable(
name="teachers_students",
JoinColunms={@JoinColumnn(name="sid")},
inverseJoinColumns={@JoinColumn(name="tid")}
)
<5>继承映射
在父类
@Entity
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING, length=1)
在子类
@Entity
@DiscriminatorValue("s")
<6>组件映射
组件类中:
@Embeddable// 嵌入式对象(又名组件)
使用组件的类中:
@Embedded
<7>复合主键映射
1、 在主类
@IdClass(PersonPK.class)//指定复合主键对应的主键类
2、//创建复合主键:必须实现串行化接口(Serializable,且重写hashCode()和equals()方法