Eu tenho um modelo de objeto persistido por JPA que contém um relacionamento muitos-para-um: um Accounttem muitos Transactions. A Transactiontem um Account.
Aqui está um trecho do 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;
Eu sou capaz de criar um Accountobjeto, adicionar transações a ele e persistir o Accountobjeto corretamente. Mas, quando crio uma transação, usando uma Conta já persistente e persistindo a Transação , recebo uma exceção:
Causado por: org.hibernate.PersistentObjectException: entidade desanexada passada para persistir: com.paulsanwald.Account em org.hibernate.event.internal.DefaultPersistEventListener.onPersist (DefaultPersistEventListener.java:141)
Portanto, sou capaz de persistir um Accountque contenha transações, mas não uma transação que possua um Account. Eu pensei que isso era porque o Accountnão pode ser anexado, mas esse código ainda me dá a mesma exceção:
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);
Como posso salvar corretamente um Transactionassociado a um Accountobjeto já persistente ?