Ho le classi di entità di seguito. Quando un utente si registra per la prima volta, vengono forniti solo il nome utente e la password, quindi l'elenco degli account (profili di pensiero) è vuoto. Successivamente, quando aggiungono un account, l'oggetto utente viene aggiornato nel client, passato al server e quindi viene chiamato entityManager.merge (utente). Quando l'utente viene unito, l'account viene aggiunto 6 volte al database e l'indirizzo fornito viene aggiunto tre volte. Non sono sicuro del perché. Vorrei che l'account venisse aggiunto una volta e un solo indirizzo da aggiungere. Qualche idea su cosa potrebbe accadere?JPA Merge sta causando duplicati
@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...
}
È possibile eliminare cose come @Column (name = "id") o @Column (name = "zip") se non si cambia il nome. – whiskeysierra
il server live ha come impostazione predefinita tutti i nomi di tabella e colonna di maiuscole e il mio server di test ha il valore predefinito in lettere minuscole, quindi è sembrato più semplice modificare le impostazioni. – chris
Hai trovato una soluzione? –