2017-02-13 9 views
0

私はテーブルの主キーのために自動生成されたidフィールドを持っています。私は仕様でそれを保つ必要があります。ただし、論理キーは(firstName, lastName)ペアです。エンティティ・クラス内のレコード挿入時のHibernateコンポジット論理キー

次のように、私はフィールドを定義:

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private long id; 

// @NotNull 
// @Column(nullable = false) 
private String firstName; 

private String lastName; 

とオーバーライドequals()hashCode()のみfirstNamelastNameを使用。

すでにデータベースにある(firstName, lastName)のレコードを保存しようとすると、保存されずにエラーがスローされるように設定します。現在 、

session.save(person); 

は、彼らが来る限り多くの重複 (firstName, lastName)ペアを保存しています。これはHibernateでどのように行われますか?

@Table([email protected](columnNames = {"firstName", "lastName"})) 

達成していません。

+0

dbカラム名は本当に 'firstName'と' lastName'ですか? 'first_name'と' last_name'ではなく? – veljkost

+0

@veljkostはい。エンティティクラスのフィールド名は、dbフィールドとまったく同じスペルを持ちます。私は最初にHibernateにテーブルを作成させました。 –

答えて

0

私はテーブルを作成した後、私は

@Table([email protected](columnNames = {"firstName", "lastName"})) 

を追加したのです。

作品。

関連する問題