Tôi có các lớp thực thể bên dưới. Khi người dùng đăng ký lần đầu, chỉ có tên người dùng và mật khẩu được cung cấp, vì vậy danh sách tài khoản (các tiểu sử suy nghĩ) trống. Sau đó, khi họ thêm một tài khoản, đối tượng người dùng được cập nhật trong máy khách, được chuyển đến máy chủ, và sau đó entityManager.merge (người dùng) được gọi. Khi người dùng được hợp nhất, tài khoản sẽ được thêm 6 lần vào cơ sở dữ liệu và địa chỉ được cung cấp sẽ được thêm ba lần. Tôi cung không chăc tại sao. Tôi muốn tài khoản được thêm một lần và chỉ thêm một địa chỉ. Bất kỳ ý tưởng về những gì có thể xảy ra?Hợp nhất JPA đang gây ra các bản sao
@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...
}
Bạn có thể thả những thứ như @column (name = "id") hoặc @column (name = "zip") nếu bạn không thay đổi tên. – whiskeysierra
máy chủ trực tiếp mặc định là tất cả các tên bảng và cột và máy chủ thử nghiệm của tôi mặc định là chữ thường, vì vậy nó dường như dễ dàng hơn thay đổi cài đặt. – chris
Bạn đã tìm được giải pháp chưa? –