Làm thế nào tôi có thể cấu hình ánh xạ kế thừa Hibernate bằng cách sử dụng chú thích Java? Những lợi thế của việc sử dụng thừa kế trong Chú thích là gì?Thừa kế trong Chú thích Hibernate?
Trả lời
Đây là một câu hỏi rất chung chung, nhưng tôi muốn khuyên dùng một cái nhìn tại các nguồn sau:
- The documentation on how inheritance is declared via Hibernate annotations.
- This PDF file (chương 2 của một cuốn sách về Hibernate). Chuyển tiếp giao dịch với chú thích Hibernate.
Nhưng câu trả lời rất cơ bản cho câu hỏi của bạn là bạn nên sử dụng @Inheritance
chú thích, như vậy:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable {
...
}
Có vì tôi học để học nó. Tôi xa lạ chủ đề này. Hành tây của tôi là trộn. Cảm ơn bạn vì tài nguyên. – stical
tôi sẽ đề nghị sử dụng các chú thích @Inheritance qua @MappedSuperclass. Chúng tôi đã gặp sự cố trong quá khứ với @MappedSuperclass đủ linh hoạt cho các nhu cầu bảo trì liên tục của chúng tôi.
Matt, bạn có thể vui lòng đề xuất những vấn đề với MappedSuperClass, vì chúng tôi đã sử dụng nó rộng rãi trong ứng dụng của chúng tôi. – Achow
3 loại tốt:
1. bảng Độc thân mỗi chiến lược hệ thống phân cấp lớp:
@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>
- Ưu điểm: đơn giản nhất. Không có JOIN yêu cầu
- Nhược điểm: Không thể sử dụng giá trị rỗng. Số cột tăng với độ sâu đồ thị đối tượng.
2. Tham gia chiến lược lớp con:
Database Bàn
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;
}
thử nghiệm module
TestSubClass sub = new TestSubClass("sub1");
sub.setSupName("supersuper"); session1.save(sub);
SQL tạo
Hibernate: insert into SUPER_TABLE (sup_name, id_col) values (?, ?)
Hibernate: insert into SUB_TABLE (sub_name, SUP_ID) values (?, ?)
- Ưu điểm: Cấu trúc dữ liệu được chuẩn hóa.
- Nhược điểm: JOINS luôn reqd.
3. Bảng mỗi chiến lược lớp bê tông:
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>
mô-đun thử nghiệm
CreditCardPayment credit = new CreditCardPayment("C",1.0);
session1.save(credit);
SQL tạo
Hibernate: insert into CREDIT_CARD (amount, creditCardType, payment_id) values (?, ?, ?)
Ngoài ra còn có một @MappedSuperClass mà chúng tôi đã sử dụng tôi không ứng dụng ur.
- 1. chú thích javax.persistence và thừa kế
- 2. @ManyToAny chú thích trong hibernate
- 3. Mapping thừa kế đa cấp trong Hibernate
- 4. Xóa các chú thích thừa trong ggplot2
- 5. Lớp trừu tượng được thừa kế với JPA (+ Hibernate)
- 6. Chú thích Hibernate hoặc cấu hình XML
- 7. Loại thừa kế nào thích hợp hơn?
- 8. Khi nào sử dụng chú thích DiscriminatorValue trong hibernate
- 9. JPA 2,0 @OrderColumn chú thích trong Hibernate 3,5
- 10. Chú thích tùy chỉnh mùa xuân: cách kế thừa các thuộc tính?
- 11. Sự khác nhau giữa kế thừa đặc điểm và tự chú thích kiểu
- 12. Mùa xuân: điều khiển kế thừa bằng cách sử dụng chú thích @Controller
- 13. Cách tốt nhất để thêm chú thích vào các phương thức kế thừa
- 14. Làm cách nào để chú thích đúng các lớp thừa kế bằng ORMLite?
- 15. Hibernate - sự khác biệt giữa chú thích và chú thích commons?
- 16. Lập bản đồ thừa kế với JPA/Hibernate
- 17. Hibernate @embeddable chú thích tương đương với tệp ánh xạ XML?
- 18. C#: Thừa kế thừa kế
- 19. java 7 lỗi nâng cấp và lỗi chú thích hibernate
- 20. truy vấn tên không biết - Chú thích & Hibernate
- 21. Quan hệ giữa JPA và Hibernate chú thích
- 22. việc sử dụng các chú thích Hibernate @LazyCollection
- 23. Hibernate - Cách đặt sql-type bằng chú thích?
- 24. iPhone - UIImagePickerControllerKho thừa kế kế thừa
- 25. Thừa kế thừa kế và thừa kế phương thức
- 26. Chú thích JPA trong Android
- 27. Validate Mobile Number sử dụng Hibernate chú thích
- 28. Tạo chỉ mục trên DB bằng Hibernate @Index Chú thích
- 29. Cách sử dụng chú thích xác thực Hibernate với enums?
- 30. Lập bản đồ các loại enum với Chú thích Hibernate
Câu hỏi của bạn không có ý nghĩa quá nhiều.Bạn có thể cung cấp thêm thông tin về vấn đề của mình không? – Zoman
@Zoman - nếu bạn đang tìm kiếm cách sử dụng tính không trung thực với chú thích ở chế độ ngủ đông, câu hỏi này chỉ là những gì bạn cần. Tôi chỉ googled ba từ khóa này, và có câu trả lời ở đây. – ripper234