JPA / Hibernate: entidade desanexada passada para persistir

Eu tenho um modelo de objeto persistente de JPA que contém um relacionamento muitos-para-um: uma conta tem muitas transações. Uma transação tem uma conta.

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 objeto Account, adicionar transações a ele e persistir o objeto Account corretamente. Mas, quando eu crio uma transação,usando uma conta já existentee persistindo oa transação, Obtenho uma exceção:

Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.paulsanwald.Account
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141) 

Assim, posso persistir uma conta que contenha transações, mas não uma transação que tenha uma conta. Eu pensei que isso era porque a conta não pode ser anexada, 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 uma transação associada a um objeto de conta já persistente?

questionAnswers(13)

yourAnswerToTheQuestion