JPA合并导致重复

chr*_*ris 5 java merge jpa duplicates

我有下面的实体类.当用户首次注册时,仅提供用户名和密码,因此帐户列表(思考配置文件)为空.稍后,当他们添加帐户时,会在客户端更新用户对象,传递给服务器,然后调用entityManager.merge(user).合并用户时,会将帐户添加6次到数据库,并将提供的地址添加三次.我不知道为什么.我想要添加一次帐户,只添加一个地址.关于可能发生的事情的任何想法?

@Entity
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinTable(name="user_accounts")
    private List<Account> accounts;

    //...getters and setters ...
}




@Entity
public class Account implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private long id;

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="address")
    private Address address;

    //...getters and setters...

}



@Entity
public class Address implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="street")
    private String street;

    @Column(name="city")
    private String city;

    @Column(name="state")
    private String state;

    @Column(name="zip")
    private String zip;

    //...getters and setters...
}
Run Code Online (Sandbox Code Playgroud)

小智 0

您是否尝试过:

persist(address)
account.setAddress(address)
persist(account)
user.setAccount(account)
merge(user)
Run Code Online (Sandbox Code Playgroud)

我认为是因为地址帐户已经生成了id并且您指定了级联导致了这个问题。