JPAでHibernateを使用しており、次のような関係があります。
@Entity
@Table(name = "first")
public class First {
...
@OneToMany(mappedBy = "first")
private List<Availability> availabilities;
...
}
@Entity
@Table(name = "second")
public class Second {
...
@OneToMany(mappedBy = "second")
private List<Availability> availabilities;
...
}
@Entity
@Table(name="availability")
public class Availability implements Serializable {
@Id
@ManyToOne
@JoinColumn(name = "first_id")
private First first;
@Id
@ManyToOne
@JoinColumn(name = "second_id")
private Second second;
@Column(name = "availability")
private Integer availability;
...
hashcode and equals
}
これら 3 つのエンティティを個別に管理したいと考えています。最初と 2 番目は正常に動作しますが、merge() を実行しようとすると、3 番目の postgresql は ID の代わりに null 値を取得し、制約違反の例外がスローされます。なんで?このエンティティでマージを使用して、テーブルに新しい行を追加することはできますか?
更新:マージは次のようなものです:
public Availability setAvailability(Availability a) {
return em.merge(a);
}
可用性はフロントエンドから逆シリアル化されます (言及すると、「キー」クラスのコレクションはその中で切り離されます)。