1対多を表す私のエンティティ:
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue
private int id = -1;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<SignIn> signIns;
}
@Entity
@Table(name = "SignIns")
public class SignIn {
@Id
@GeneratedValue
private int id;
@ManyToOne
private User user;
public SignIn(User user) {
this.user = user;
}
}
ユーザーを永続化してから、作成したユーザーでサインインを永続化すると、すべてが正常に機能します(各テーブルには1行があります)。作成したユーザーを再利用して別のサインインを永続化すると、最初のサインイン行が新しいサインインに置き換えられます。
持続するコード:
User user = new User();
persist(user);
SignIn signIn = new SignIn(user);
SignIn signIn2 = new SignIn(user);
persist(signIn);
persist(signIn2);
private void persist(Object entity) {
EntityManager em = entityManagerFactory.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
em.merge(entity);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
em.close();
}
}
私は何を見落としましたか?