Javaアノテーションを使用してHibernate継承マッピングを設定するにはどうすればよいですか?アノテーションで継承を使用する利点は何ですか?ハイバネートアノテーションの継承?
答えて
は、これは非常に一般的な質問ですが、私は次のリソースでご覧になることをお勧めする:
- The documentation on how inheritance is declared via Hibernate annotations.
- This PDF file(休止状態に関する書籍の第2章)。ページ38では、Hibernateアノテーションを扱う予定です。
しかし、あなたの質問に非常に基本的な答えはとても好きですが、@Inheritance
アノテーションを使用する必要があることです。
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable {
...
}
私はそれを学ぶために勉強しています。私は見知らぬ人です。私のタマネギはミックスです。リソースに感謝します。 – stical
私は@MappedSuperclass上@Inheritanceアノテーションを使用してお勧めします。 @MappedSuperclassは、私たちの継続的なメンテナンスニーズのために十分な柔軟性を持っています。
Matt、MappedSuperClassの問題点は、アプリケーションで広く使用されているのでお勧めしますか? – Achow
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>
- 長所:最も簡単な。 JOINは必要ありません。
- 短所:NULLは使用できません。オブジェクトグラフの深さとともに列の数が増えます。
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 (?, ?)
- 長所:正規化されたデータ構造。
- 短所:JOINSは常に必要です。具象クラスの戦略あたり
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もありますインウルアプリケーション。
- 1. BuildManager継承の継承
- 2. データ継承の継承
- 3. クラス継承とインターフェイス継承
- 4. 継承 - ターゲット固有の継承クラスC#
- 5. Vector :: Vectorの継承継承クラス
- 6. Entity Frameworkとの継承継承
- 7. テンプレートを継承した継承継承メンバ
- 8. CSSが継承しない継承
- 9. 反復子継承と継承* this
- 10. C++多重継承/仮想継承
- 11. 継承する継承するインターフェイス
- 12. 継承したクラスを継承する
- 13. 継承継承について
- 14. Java ORM:複数(継承)継承
- 15. 継承
- 16. 継承
- 17. 継承
- 18. 継承
- 19. 継承
- 20. 継承
- 21. 継承
- 22. 継承
- 23. 継承
- 24. NSStringの継承
- 25. テンプレートクラスの継承
- 26. C++の継承
- 27. バックボーンビューの継承
- 28. VB.netの継承
- 29. JavaScriptの継承
- 30. JavaScript:ECMAScript5の継承
あなたの質問はあまり意味がありません。あなたの問題に関する詳細情報を提供できますか? – Zoman
@Zoman - 休止状態でアノテーションを継承する方法を探しているなら、この質問は必要なものです。私はこれらの3つのキーワードを探せば、ここで答えを得た。 – ripper234