Hibernate常用注释收集3


映射继承关系

EJB支持3种类型的继承。

? Table per Class Strategy: the element in Hibernate 每个类一张表
? Single Table per Class Hierarchy Strategy: the element in Hibernate 每个类层次结
构一张表
? Joined Subclass Strategy: the element in Hibernate 连接的子类策略

@Inheritance 注解来定义所选的之类策略。

每个类一张表

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable {

有缺点,如多态查询或关联。Hibernate 使用 Union 查询来实现这种策略。 这种策略
支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。
一旦使用就不能使用AUTO和IDENTIFY生成器。

每个类层次结构一张表

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name=”planetype”,
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue(“Plane”)
public class Plane { … }

@Entity
@DiscriminatorValue(“A320”)
public class A320 extends Plane { … }

整个层次结构中的所有父类和子类属性都映射到同一个表中,他们的实例通过一个辨别符列
(discriminator)来区分。

Plane 是父类。@DiscriminatorColumn 注解定义了辨别符列。对于继承层次结构中的每个类,
@DiscriminatorValue 注解指定了用来辨别该类的值。 辨别符列名字默认为 DTYPE,其默
认值为实体名。其类型为DiscriminatorType.STRING。

连接的子类

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Boat implements Serializable { … }

@Entity
public class Ferry extends Boat { … }

@Entity
@PrimaryKeyJoinColumn(name=”BOAT_ID”)
public class AmericaCupClass extends Boat { … }

以上所有实体使用 JOINED 策略 Ferry和Boat class使用同名的主键关联(eg: Boat.id =
Ferry.id), AmericaCupClass 和 Boat 关联的条件为 Boat.id = AmericaCupClass.BOAT_ID.

从父类继承的属性

@MappedSuperclass
public class BaseEntity {
@Basic
@Temporal(TemporalType.TIMESTAMP)
public Date getLastUpdate() { … }
public String getLastUpdater() { … }

}

@Entity class Order extends BaseEntity {
@Id public Integer getId() { … }

}

继承父类的一些属性,但不用父类作为映射实体,这时候需要 @MappedSuperclass 注解。 上
述实体映射到中的时候对应 Order 实体Bean, 其具有 id, lastUpdate, lastUpdater 三
个属性。如果没有@MappedSuperclass 注解,则父类中属性忽略,这是 Order 实体 Bean 只
有 id 一个属性。

映射实体Bean的

一对一

使用 @OneToOne 注解可以建立实体Bean之间的一对一关系。一对一关系有3种情况。

? 关联的实体都共享同样的主键。

@Entity
public class Body {
@Id
public Long getId() { return id; }
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public Heart getHeart() {
return heart;
}

}

@Entity
public class Heart {
@Id
public Long getId() { …}
}

通过@PrimaryKeyJoinColumn 注解定义了一对一的

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《Hibernate常用注释收集3
本文地址:https://www.zhiletu.com/archives-274.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微