Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate注释中的继承?_Hibernate_Inheritance_Annotations - Fatal编程技术网

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

如何使用Java注释配置Hibernate继承映射?在注释中使用继承的优点是什么?

这是一个非常普遍的问题,但我建议看一下以下参考资料:

  • (关于冬眠的书的第二章)。第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 (?, ?, ?)
  • 优点:规范化的数据结构
  • 缺点:总是需要连接
3。每个具体类策略的表:

 @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存在哪些问题,因为我们在应用程序中广泛使用了它。