Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA OneToMany在插入另一行时删除第一行(在多行侧)_Java_Jpa_Datanucleus_Many To One - Fatal编程技术网

Java JPA OneToMany在插入另一行时删除第一行(在多行侧)

Java JPA OneToMany在插入另一行时删除第一行(在多行侧),java,jpa,datanucleus,many-to-one,Java,Jpa,Datanucleus,Many To One,我的实体代表一对多: @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

我的实体代表一对多:

@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;
    }
}

我忽略了什么?

我也必须将登录设置在相反的一侧(在我的情况下是用户)

所以:
-创建登录
-合并它
-将其添加到用户中

-合并用户

您如何更新代码中的登录?我正在使用同一用户添加新登录。为了持久化新的登录,我使用,就像我对用户实体和第一个登录所做的一样。我认为您需要检索整个列表。并将其添加到该列表中。除非我遗漏了什么,这是级联型的。所有这些都会导致问题。如果没有它,则会正确添加条目。我想在删除用户时删除登录(我还尝试了CascadeType.delete)。显示用于创建新登录的代码。
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();
        }
    }