J'ai un modèle d'objet persistant JPA qui contient une relation plusieurs-à-un: an Account
a plusieurs Transactions
. A en Transaction
a un Account
.
Voici un extrait du code:
@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;
Je peux créer un Account
objet, y ajouter des transactions et conserver Account
correctement l' objet. Mais, lorsque je crée une transaction, en utilisant un compte existant déjà persistant et en persistant la transaction , j'obtiens une exception:
Causée par: org.hibernate.PersistentObjectException: entité détachée passée pour persister: com.paulsanwald.Account à org.hibernate.event.internal.DefaultPersistEventListener.onPersist (DefaultPersistEventListener.java:141)
Donc, je suis capable de persister un Account
qui contient des transactions, mais pas une transaction qui a un Account
. Je pensais que c'était parce queAccount
peut ne pas être attaché, mais ce code me donne toujours la même exception:
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);
Comment puis-je enregistrer correctement un Transaction
, associé à un Account
objet déjà persistant ?