4

Hibernate で単純な JoinTable 操作を実行しようとしていますが、うまくいきます。「Person」というエンティティを表すテーブルが 1 つあります。社会保障番号を表す別のテーブルがあります (たとえば)。社会保障番号を String (VARCHAR2) として PersonEntity のプロパティにしたいと考えています。PersonEntity は、次のコードがなくても問題なく動作します。これが私がやろうとしていることです。

@JoinTable(name = "PERSON_ID_X_SSN", 
               joinColumns = {@JoinColumn(name = "PERSON_ID")})
    @Column(name="SSN", nullable=false, updatable=false)
    private String social;

PERSON_ID_X_SSN テーブルは単純です。

PERSON_ID, SSN

このコードがなくても、すべてがうまく機能します。エンティティ全体に追加するとすぐに null になります。PERSON_ID_X_SSN 用に別のエンティティを作成したくありません...助けてください! ありがとう

4

1 に答える 1

4

@JoinTable は、エンティティ間の関係を保持するために使用されるテーブルを指定するためのものです。

この場合、エンティティ間に関係はありませんが、1 つのエンティティを 2 つのテーブルに永続化する必要があります。@SecondaryTableは、この目的を果たすアノテーションです。アイデアは、エンティティにセカンダリ テーブル (または @SecondaryTables を介して複数) を指定し、属性を永続化するためにプライマリ以外のテーブルを使用する必要がある場合は、@Column アノテーションでテーブルの名前を明示的に言及することです。

あなたの場合、次のようなものが機能します:

@Entity
@Table(name="CUSTOMER")
@SecondaryTable(
  name="PERSON_ID_X_SSN", 
  pkJoinColumns=@PrimaryKeyJoinColumn(name="PERSON_ID"))
public class Person {
  @Column(table="PERSON_ID_X_SSN", name="SSN")
  private String social;
  ...
}

}

于 2012-03-31T20:01:25.317 に答える