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 回答