У меня есть классы сущностей ниже. Когда пользователь сначала регистрируется, предоставляются только имя пользователя и пароль, поэтому список учетных записей (думаю, профили) пуст. Позже, когда они добавляют учетную запись, пользовательский объект обновляется в клиенте, передается на сервер, а затем вызывается entityManager.merge (пользователь). Когда пользователь сливается, учетная запись добавляется 6 раз в базу данных, а указанный адрес добавляется три раза. Я не знаю, почему. Я бы хотел, чтобы учетная запись была добавлена один раз и добавлен только один адрес. Любые идеи о том, что может произойти?JPA Merge вызывает дубликаты
@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...
}
Вы можете оставить такие вещи, как @Column (имя = "ID") или @Column (имя = "почтовый") , если вы не меняете имена. – whiskeysierra
сервер работает по умолчанию для всех заголовков таблиц и имен столбцов, а мой тестовый сервер по умолчанию имеет строчные значения, поэтому это проще, чем изменение настроек. – chris
Вы нашли решение? –