Tôi có một mô hình đối tượng bền vững JPA có chứa mối quan hệ nhiều-một: một Accountcó nhiều Transactions. A Transactioncó một Account.
Đây là một đoạn mã:
@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;
Tôi có thể tạo một Accountđối tượng, thêm giao dịch vào nó và duy trì Accountchính xác đối tượng. Nhưng, khi tôi tạo một giao dịch, sử dụng Tài khoản đã tồn tại và duy trì Giao dịch , tôi nhận được một ngoại lệ:
Nguyên nhân là do
Vì vậy, tôi có thể duy trì một Accountgiao dịch có chứa các giao dịch, nhưng không phải là Giao dịch có Account. Tôi nghĩ điều này là do Accountcó thể không được đính kèm, nhưng mã này vẫn cho tôi ngoại lệ tương tự:
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);
Làm thế nào tôi có thể lưu chính xác a Transaction, được liên kết với một Accountđối tượng đã tồn tại ?