Hibernate注释中的继承?
如何使用Java注释配置Hibernate继承映射?在注释中使用继承的优点是什么?这是一个非常普遍的问题,但我建议看一下以下参考资料:Hibernate注释中的继承?,hibernate,inheritance,annotations,Hibernate,Inheritance,Annotations,如何使用Java注释配置Hibernate继承映射?在注释中使用继承的优点是什么?这是一个非常普遍的问题,但我建议看一下以下参考资料: (关于冬眠的书的第二章)。第38页涉及Hibernate注释 但是对于您的问题,最基本的答案是您应该使用@heritation注释,如下所示: @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Flight implements Serializabl
- (关于冬眠的书的第二章)。第38页涉及Hibernate注释
@heritation
注释,如下所示:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable {
...
}
我建议在@MappedSuperclass上使用@Inheritation注释。在过去,@MappedSuperclass的灵活性足以满足我们的日常维护需求,这方面我们遇到了一些问题。3种可能的类型: 1。每类单表层次结构策略:
@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 { ... }
<hibernate-mapping>
<subclass name="DomesticCat" extends="Cat" discriminator-value="D">
<property name="name" type="string"/>
</subclass>
create table CREDIT_CARD( payment_id number primary key, amount
number, creditCardType varchar2(2) );
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Payment {
@Id
@GeneratedValue(
strategy=GenerationType.SEQUENCE,
generator="SEQ_GEN")
@SequenceGenerator(
name="SEQ_GEN",
sequenceName="hibernate_sequence"
)
@Column(name = "payment_id")
private long id;
private double amount;
@Entity
@Table(name="CREDIT_CARD")
public class CreditCardPayment extends Payment {
private String creditCardType;
<class name="Payment">
<id name="id" type="long" column="PAYMENT_ID">
<generator class="sequence"/>
</id>
<property name="amount" column="AMOUNT"/>
...
<union-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
<property name="creditCardType" column="CCTYPE"/>
...
</union-subclass>
SQL生成
Hibernate: insert into SUPER_TABLE (sup_name, id_col) values (?, ?)
Hibernate: insert into SUB_TABLE (sub_name, SUP_ID) values (?, ?)
Hibernate: insert into CREDIT_CARD (amount, creditCardType, payment_id) values (?, ?, ?)
- 优点:规范化的数据结构
- 缺点:总是需要连接
@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 { ... }
<hibernate-mapping>
<subclass name="DomesticCat" extends="Cat" discriminator-value="D">
<property name="name" type="string"/>
</subclass>
create table CREDIT_CARD( payment_id number primary key, amount
number, creditCardType varchar2(2) );
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Payment {
@Id
@GeneratedValue(
strategy=GenerationType.SEQUENCE,
generator="SEQ_GEN")
@SequenceGenerator(
name="SEQ_GEN",
sequenceName="hibernate_sequence"
)
@Column(name = "payment_id")
private long id;
private double amount;
@Entity
@Table(name="CREDIT_CARD")
public class CreditCardPayment extends Payment {
private String creditCardType;
<class name="Payment">
<id name="id" type="long" column="PAYMENT_ID">
<generator class="sequence"/>
</id>
<property name="amount" column="AMOUNT"/>
...
<union-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
<property name="creditCardType" column="CCTYPE"/>
...
</union-subclass>
SQL生成
Hibernate: insert into SUPER_TABLE (sup_name, id_col) values (?, ?)
Hibernate: insert into SUB_TABLE (sub_name, SUP_ID) values (?, ?)
Hibernate: insert into CREDIT_CARD (amount, creditCardType, payment_id) values (?, ?, ?)
我们在应用程序中还使用了@MappedSuperClass。您的问题没有太多意义。你能提供更多关于你的问题的信息吗?@Zoman-如果你想知道如何在hibernate中使用Inheritance和注释,这个问题正是你需要的。我只是在谷歌上搜索了这三个关键词,在这里找到了答案。是的,因为我学习是为了学习。我对这个问题不熟悉。我的洋葱是混合的。因此,感谢您提供的资源。Matt,您能否建议MappedSuperClass存在哪些问题,因为我们在应用程序中广泛使用了它。