如何使用Java注释配置Hibernate继承映射?在注释中使用继承有什么好处?Hibernate注释中的继承?
26
A
回答
7
这是一个非常普遍的问题,但我会在下面的资源劝考虑看看:
- The documentation on how inheritance is declared via Hibernate annotations.
- This PDF file(一本书上的Hibernate的第2章)。转发Hibernate注释的处理。
但是非常基本的回答你的问题是,你应该使用@Inheritance
注释,像这样:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable {
...
}
+0
是的,因为我学习了解它。我对这个问题很陌生。我的洋葱是混合的。所以谢谢你的资源。 – stical 2009-09-04 08:25:19
0
我会建议使用在@MappedSuperclass的@Inheritance注解。过去我们遇到了问题,@MappedSuperclass对于我们持续的维护需求足够灵活。
+5
Matt,能否请您提出MappedSuperClass的问题,因为我们在应用程序中广泛使用了它。 – Achow 2012-09-21 11:04:55
51
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>
- 优点:最简单的。不需要连接
- 缺点:不能使用空值。对象图深度增加列数。
2.连接子类策略:
数据库表
CREATE TABLE SUPER_TABLE(
id_col number primary key,
sup_Name varchar2(20));
CREATE TABLE SUB_TABLE(
SUP_ID primary key,
sub_name varchar2(20),
constraint SUB_TABLE_fk foreign key (sup_Id) references super_table(id_col));
@Entity
@Table(name= "SUPER_TABLE")
@Inheritance(strategy= InheritanceType.JOINED)
public class TestSuperClass {
@Id
@GeneratedValue(
strategy=GenerationType.SEQUENCE,
generator="SEQ_GEN")
@SequenceGenerator(
name="SEQ_GEN",
sequenceName="hibernate_sequence"
)
@Column(name ="id_col")
private long idcol;
@Column(name ="sup_name")
private String supName;
@Entity
@Table(name="SUB_TABLE")
@PrimaryKeyJoinColumn(name="SUP_ID")
<class name="Payment" table="PAYMENT">
<id name="id" type="long" column="PAYMENT_ID">
<generator class="native"/>
</id>
<property name="amount" column="AMOUNT"/>
...
<joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
<key column="PAYMENT_ID"/>
<property name="creditCardType" column="CCTYPE"/>
...
</joined-subclass>
<joined-subclass name="CashPayment" table="CASH_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
public class TestSubClass extends TestSuperClass{
private String sub_name;
}
测试模块
TestSubClass sub = new TestSubClass("sub1");
sub.setSupName("supersuper"); session1.save(sub);
SQL生成
Hibernate: insert into SUPER_TABLE (sup_name, id_col) values (?, ?)
Hibernate: insert into SUB_TABLE (sub_name, SUP_ID) values (?, ?)
- 优点:规范化的数据结构。
- 缺点:连接总是需要。
3.每个具体类策略表:
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>
测试模块
CreditCardPayment credit = new CreditCardPayment("C",1.0);
session1.save(credit);
SQL生成
Hibernate: insert into CREDIT_CARD (amount, creditCardType, payment_id) values (?, ?, ?)
还有,我们已经使用了@MappedSuperclass在o你的申请。
相关问题
- 1. Hibernate继承注释说明
- 2. JPA/Hibernate注释不理解继承?
- 3. Java注释“继承”
- 4. Symfony2注释继承
- 5. Hibernate注解和继承
- 6. javax.persistence注释和继承
- 7. 继承映射注释
- 8. JPA注释与继承
- 9. 注释继承不工作
- 10. 斯卡拉注释继承
- 11. Java注释和继承
- 12. Doxygen fortran文档中的注释继承
- 13. 在Java8中的注释继承
- 14. Hibernate的注解继承一对多Placemant
- 15. Hibernate Search的注解不是继承
- 16. 继承Hibernate
- 17. 继承Hibernate OGM
- 18. Hibernate继承Single_table
- 19. 继承抽象类的注释吗?
- 20. 继承针对性的注释
- 21. Hibernate注释。如何注释?
- 22. Hibernate中注释类
- 23. 你能专门继承Java注释
- 24. 注释继承作用怪异
- 25. 休眠:附加注释列从继承
- 26. 添加数据注释来继承
- 27. JPA深度继承注释属性
- 28. Hibernate继承与SingleTable
- 29. Hibernate继承映射
- 30. Hibernate映射继承
你的问题没有太大意义。你能提供更多关于你的问题的信息吗? – Zoman 2009-09-03 13:42:34
@Zoman - 如果你正在寻找如何在休眠中使用注释的问题,这个问题就是你需要的。我只是搜索了这三个关键词,并在这里得到了答案。 – ripper234 2010-11-26 10:56:40