SecundaryTableを介して2つのテーブルを持つJPA1つのエンティティ

猿飛ヒルゼン

次の簡略化されたセットアップを機能させることができません。条件APIを使用して1つのクラスのテーブルの2つの値を取得したいだけです。@OneToOneまたは@OneToManyなどで2つのクラスを使用したくありません。

これは可能ですか?そのようなことはJPAでは意図されていませんか?

最初の表:

test.table_1(
  id integer,
  value_1 text,
  table_2_id integer
)

2番目の表:

test.table_2(
  id integer,
  value_2 text
)

エンティティクラス:

@Entity
@Table(schema = "test", name = "table_1")
@SecondaryTable(schema = "test", name = "table_2", pkJoinColumns = {
    @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "table_2_id")
})
public class JointEntity {
  @Id
  private Integer id;
  @Column(name = "value_1")
  private String value1;
  @Column(name = "value_2", table = "table_2")
  private String value2;

  // getter and setter
}

実行時にスローされる例外:

Exception in thread "main" org.hibernate.cfg.RecoverableException: Unable to find column with logical name: table_2_id in org.hibernate.mapping.Table(test.table_1) and its related supertables and secondary tables
    at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:831)
    at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:608)
    at org.hibernate.cfg.annotations.EntityBinder.bindJoinToPersistentClass(EntityBinder.java:794)
    at org.hibernate.cfg.annotations.EntityBinder.createPrimaryColumnsToSecondaryTable(EntityBinder.java:786)
    at org.hibernate.cfg.annotations.EntityBinder.finalSecondaryTableBinding(EntityBinder.java:714)
    at org.hibernate.cfg.SecondaryTableSecondPass.doSecondPass(SecondaryTableSecondPass.java:29)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1621)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1586)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at de.icybits.test.HibernatePerformanceTest.main(HibernatePerformanceTest.java:18)
Caused by: org.hibernate.MappingException: Unable to find column with logical name: table_2_id in org.hibernate.mapping.Table(test.table_1) and its related supertables and secondary tables
    at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:826)
    ... 14 more
猿飛ヒルゼン

彼の称賛で言及されたビリーフロストのように、@ SecundaryTableはこのように使用されることを意図していません。それで私はさらに調査をしました。ビリーフロストのコメントが私の質問に完全に答えていないからです。

  1. 上記のセットアップ(1つのエンティティに2つのテーブル)をアーカイブすることは可能ですか?

これに対する答えは「はい」です。他の質問で回避策を見つけました。休止状態-エンティティ全体ではなく、単一の列のみに結合します

  1. そのようなことはJPAでは意図されていませんか?

1.で述べたように、これは単なる回避策です。一般に、単一の外部列をエンティティに関連付けることだけを目的としたものではありません。(私はこれを100%確信しているわけではありませんが、さらに調査した結果、それが私が結論付けたものです。)

最後に、ビリー・フロストの素早いコメントに感謝します。このため、私は@SecundaryTableを調査から除外し、より良い答えを見つけることができました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Hibernateは2つのテーブル/エンティティに対して1つのIDを生成します

分類Dev

1つのエンティティを使用する2つのテーブル

分類Dev

HQLは、2つのテーブルを結合して1つのエンティティのプロパティを選択します

分類Dev

Doctrine-複数のエンティティのタグを持つ1つのテーブル

分類Dev

2つのテーブルを持つ多対多のエンティティフレームワーク

分類Dev

Spring Boot JPA:1つのエンティティを同じ列を持つ複数の(たくさんの)テーブルにマッピングする

分類Dev

1つのエンティティにつき2つのテーブルを休止状態にする

分類Dev

既存のテーブルスプリングデータJPAを持つエンティティ

分類Dev

2つの主キーフィールドを持つJPAテーブル

分類Dev

Androidルームに1つのエンティティを持つテーブルをいくつか持つにはどうすればよいですか?

分類Dev

パンダを使用してテーブルから1つのエンティティを印刷する方法

分類Dev

2つのエンティティを持つDTOの検証

分類Dev

2つの異なる親エンティティがJPAの@OneToManyを介して子エンティティを参照するようにします

分類Dev

2つのIDフィールドを持つテーブルのクエリ

分類Dev

Null値を持つlong型の列を持つJPAエンティティ

分類Dev

1 つのエンティティが同じエンティティ タイプの 2 つへの参照を持つエンティティ関係?

分類Dev

php / mysqlは、複数の同一フィールドを持つ1つのテーブルをクエリし、2番目のテーブルのフィールドごとに1つの一意のエントリを作成します

分類Dev

Hibernateを使用してエンティティを作成し、2つの外部キー列を持つテーブルを作成する方法:エンティティに識別子が指定されていません:

分類Dev

同じテーブル上の2つのJPAエンティティ

分類Dev

複数の列を持つHibernateエンティティを使用して3つのテーブルを結合します

分類Dev

外部キーのみを持つテーブルを使用したエンティティ設計

分類Dev

教義: 2 つのエンティティのオブジェクトを異なる句を持つ 2 つのテーブルから取得する方法は?

分類Dev

json応答を使用して、インデックスとして1つのフィールドを持つテーブルへのDjangoORMクエリセット

分類Dev

Symfony-1つのメインエンティティをフォームを介して別のエンティティにリンクします

分類Dev

Hibernateを使用して共通のブリッジテーブルを介して3つのエンティティをマッピングする

分類Dev

Symfony2:1つのエンティティプロパティに2つのフォームフィールドを使用していますか?

分類Dev

教義2-外部エンティティとは反対の結合テーブルの外部キーを持つ永続エンティティ

分類Dev

JPA-1つのエンティティのUpdate / Deleteステートメントをミラーテーブルにリダイレクトします

分類Dev

複合キーを持つ@OneToOneエンティティのJPA @Id

Related 関連記事

  1. 1

    Hibernateは2つのテーブル/エンティティに対して1つのIDを生成します

  2. 2

    1つのエンティティを使用する2つのテーブル

  3. 3

    HQLは、2つのテーブルを結合して1つのエンティティのプロパティを選択します

  4. 4

    Doctrine-複数のエンティティのタグを持つ1つのテーブル

  5. 5

    2つのテーブルを持つ多対多のエンティティフレームワーク

  6. 6

    Spring Boot JPA:1つのエンティティを同じ列を持つ複数の(たくさんの)テーブルにマッピングする

  7. 7

    1つのエンティティにつき2つのテーブルを休止状態にする

  8. 8

    既存のテーブルスプリングデータJPAを持つエンティティ

  9. 9

    2つの主キーフィールドを持つJPAテーブル

  10. 10

    Androidルームに1つのエンティティを持つテーブルをいくつか持つにはどうすればよいですか?

  11. 11

    パンダを使用してテーブルから1つのエンティティを印刷する方法

  12. 12

    2つのエンティティを持つDTOの検証

  13. 13

    2つの異なる親エンティティがJPAの@OneToManyを介して子エンティティを参照するようにします

  14. 14

    2つのIDフィールドを持つテーブルのクエリ

  15. 15

    Null値を持つlong型の列を持つJPAエンティティ

  16. 16

    1 つのエンティティが同じエンティティ タイプの 2 つへの参照を持つエンティティ関係?

  17. 17

    php / mysqlは、複数の同一フィールドを持つ1つのテーブルをクエリし、2番目のテーブルのフィールドごとに1つの一意のエントリを作成します

  18. 18

    Hibernateを使用してエンティティを作成し、2つの外部キー列を持つテーブルを作成する方法:エンティティに識別子が指定されていません:

  19. 19

    同じテーブル上の2つのJPAエンティティ

  20. 20

    複数の列を持つHibernateエンティティを使用して3つのテーブルを結合します

  21. 21

    外部キーのみを持つテーブルを使用したエンティティ設計

  22. 22

    教義: 2 つのエンティティのオブジェクトを異なる句を持つ 2 つのテーブルから取得する方法は?

  23. 23

    json応答を使用して、インデックスとして1つのフィールドを持つテーブルへのDjangoORMクエリセット

  24. 24

    Symfony-1つのメインエンティティをフォームを介して別のエンティティにリンクします

  25. 25

    Hibernateを使用して共通のブリッジテーブルを介して3つのエンティティをマッピングする

  26. 26

    Symfony2:1つのエンティティプロパティに2つのフォームフィールドを使用していますか?

  27. 27

    教義2-外部エンティティとは反対の結合テーブルの外部キーを持つ永続エンティティ

  28. 28

    JPA-1つのエンティティのUpdate / Deleteステートメントをミラーテーブルにリダイレクトします

  29. 29

    複合キーを持つ@OneToOneエンティティのJPA @Id

ホットタグ

アーカイブ