1

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();
        }
    }

私は何を見落としましたか?

4

1 に答える 1

0

サインインも逆に設定する必要がありました(私の場合はユーザー)。

つまり、 -
サインインを作成します-マージします- ユーザーを追加します -ユーザーをマージします



于 2012-10-23T20:13:36.580 に答える