Bire bir ilişki içeren bir JPA-kalıcı nesne modeli var: bir Account
çok var Transactions
. A'nın Transaction
bir tane var Account
.
İşte kod pasajı:
@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;
Bir Account
nesne oluşturabiliyorum , ona işlemler ekleyebiliyorum ve Account
nesneyi doğru şekilde koruyabiliyorum . Ben, bir hareket oluşturmak Fakat zaten varolan Hesabı ısrar kullanarak , ve devam eden İşlem , bir istisna olsun:
Nedeni: org.hibernate.PersistentObjectException: bağımsız varlık devam etmek için geçti: org.hibernate.event.internal.DefaultPersistEventListener.onPersist adresindeki com.paulsanwald.Account (DefaultPersistEventListener.java:141)
Yani, Account
işlemleri içeren bir devam edebiliyoruz , ancak bir Account
. Bunun Account
ekli olmayabilir çünkü olduğunu düşündüm , ama bu kod hala bana aynı istisnayı verir:
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);
Transaction
Zaten var olan bir Account
nesneyle ilişkili bir a'yı nasıl doğru şekilde kaydedebilirim ?