Jak skonfigurować odwzorowania dziedziczenia hibernacji za pomocą adnotacji Java? Jakie są zalety korzystania z dziedziczenia w adnotacjach?Dziedziczenie adnotacji w hibernacji?
Odpowiedz
Jest to bardzo ogólne pytanie, ale radzę przyjrzeniu następujących środków:
- The documentation on how inheritance is declared via Hibernate annotations.
- This PDF file (rozdział 2 książki o Hibernate). Strona 38 do przodu zajmuje się adnotacjami Hibernate.
Ale bardzo podstawowe odpowiedź na to pytanie jest to, że należy użyć @Inheritance
adnotacji, tak jak poniżej:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable {
...
}
Tak, ponieważ uczę się go uczyć. Jestem obcy w tym temacie. Moja cebula to mieszanka. Dziękuję Ci za zasoby. – stical
Proponuję za pomocą adnotacji @Inheritance nad @MappedSuperclass. W przeszłości mieliśmy problemy z tym, że @MappedSuperclass jest wystarczająco elastyczny, aby sprostać naszym bieżącym potrzebom w zakresie konserwacji.
Matt, czy mógłbyś zasugerować, jakie były problemy z MappedSuperClass, ponieważ użyliśmy go szeroko w naszej aplikacji. – Achow
3 możliwe rodzaje:
1. pojedynczej tabeli za strategię hierarchii klas:
@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>
- Plusy: najprostsze. Brak wymaganych powiązań
- Przeciw: Nie można używać wartości null. Liczba kolumn rośnie wraz z głębokością wykresu obiektu.
2. Dołączył podklasa strategia:
Database Tables
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;
}
Moduł testowy
TestSubClass sub = new TestSubClass("sub1");
sub.setSupName("supersuper"); session1.save(sub);
SQL Generated
Hibernate: insert into SUPER_TABLE (sup_name, id_col) values (?, ?)
Hibernate: insert into SUB_TABLE (sub_name, SUP_ID) values (?, ?)
- Zalety: Znormalizowane struktury danych.
- Minusy: DOŁĄCZ są zawsze wymagane.
3. Tabela za konkretną strategię klasy:
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>
moduł testowy
CreditCardPayment credit = new CreditCardPayment("C",1.0);
session1.save(credit);
SQL Generated
Hibernate: insert into CREDIT_CARD (amount, creditCardType, payment_id) values (?, ?, ?)
Jest też @MappedSuperClass których użyliśmy ja nie ur wniosku.
- 1. Kiedy używać adnotacji DiscriminatorValue w hibernacji
- 2. Czego brakuje mi przy używaniu adnotacji hibernacji?
- 3. Pole tekstowe przy użyciu hibernacji adnotacji
- 4. Jak mapować "Mapę" w trybie hibernacji za pomocą adnotacji?
- 5. @UniqueConstraint i @Column (unikatowy = true) w hibernacji adnotacji
- 6. Sprawdzanie poprawności sprężyny kontra hibernacji przy użyciu adnotacji
- 7. Jak utworzyć klucz złożony hibernacji przy użyciu adnotacji
- 8. Uruchamianie generowania adnotacji narzędzia hibernacji bez atrybutu "katalog"
- 9. Potwierdzić numer telefonu komórkowego za pomocą hibernacji adnotacji
- 10. Mapowanie wielopoziomowe dziedziczenie w Hibernate
- 11. Dziedziczenie i dziedziczenie interfejsu
- 12. Tablica adnotacji jako parametr adnotacji, w Scali
- 13. Wiosna + hibernacji Autowire SessionFactory w stanie hibernacji DAO
- 14. Dziedziczenie wiosny - Adnotacja
- 15. Scala Adnotacja Dziedziczenie
- 16. typ Własna dziedziczenie w Scala
- 17. Użycie hibernacji z generics
- 18. Adnotacja sprawdzania hibernacji
- 19. Metody adnotacji w Delphi?
- 20. Wymaga przejrzystości w hibernacji cache drugiego poziomu
- 21. Dziedziczenie dziedziczenia w C#
- 22. Sprawdź dziedziczenie w nodejs
- 23. Dziedziczenie układu w jaderze
- 24. Templowanie w angular.js - dziedziczenie
- 25. Interfejs Dziedziczenie w C++
- 26. Dziedziczenie w mangurze
- 27. Dziedziczenie w kolbie/SqlAlchemy
- 28. Dziedziczenie struktur w C++
- 29. Dziedziczenie przyjaźni w C++?
- 30. Dziedziczenie klas w Pythonie
Twoje pytanie nie ma większego sensu.Czy możesz podać więcej informacji o swoim problemie? – Zoman
@Zoman - jeśli szukasz sposobu korzystania z adnotacji w hibernacji, to pytanie jest właśnie tym, czego potrzebujesz. Właśnie wypróbowałem te trzy słowa kluczowe i otrzymałem odpowiedź tutaj. – ripper234