Tengo un modelo de objetos con JPA que contiene una relación de muchos a uno: un Account
tiene muchos Transactions
. A Transaction
tiene uno Account
.
Aquí hay un fragmento del código:
@Entity
public class Transaction {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(cascade = {CascadeType.ALL},fetch= FetchType.EAGER)
private Account fromAccount;
....
@Entity
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(cascade = {CascadeType.ALL},fetch= FetchType.EAGER, mappedBy = "fromAccount")
private Set<Transaction> transactions;
Puedo crear un Account
objeto, agregarle transacciones y mantener el Account
objeto correctamente. Pero, cuando creo una transacción, usando una cuenta ya existente y persistiendo la transacción , obtengo una excepción:
Causado por: org.hibernate.PersistentObjectException: entidad separada pasada a persistir: com.paulsanwald.Account at org.hibernate.event.internal.DefaultPersistEventListener.onPersist (DefaultPersistEventListener.java:141)
Entonces, puedo persistir un Account
que contiene transacciones, pero no una Transacción que tiene un Account
. Pensé que esto se debía a que Account
podría no estar adjunto, pero este código todavía me da la misma excepción:
if (account.getId()!=null) {
account = entityManager.merge(account);
}
Transaction transaction = new Transaction(account,"other stuff");
// the below fails with a "detached entity" message. why?
entityManager.persist(transaction);
¿Cómo puedo guardar correctamente un Transaction
asociado con un Account
objeto ya persistente ?