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 Account
có nhiều Transactions
. A Transaction
có 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ì Account
chí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 Account
giao 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 Account
có 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 ?