Tôi có 2 thực thể: Account
và AccountRole
.Có cách nào để vượt qua đối tượng tách ra để JPA tồn tại không? (thực thể tách rời được chuyển sang tồn tại)
public class Account {
private AccountRole accountRole;
@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
public AccountRole getAccountRole() {
return accountRole;
}
.
public class AccountRole {
private Collection<Account> accounts = new ArrayList<Account>();
@OneToMany(mappedBy = "accountRole", fetch = FetchType.EAGER)
public Collection<Account> getAccounts() {
return accounts;
}
Sự cố xảy ra khi tôi lấy tài khoảnBỏ từ cơ sở dữ liệu và cố gắng giữ nguyên Account
. Tại thời điểm này tôi vừa tạo tài khoản và vai trò của mình đã tồn tại trong db.
AccountRole role = accountService.getRoleFromDatabase(AccountRoles.ROLE_USER);
account.setAccountRole(role);
//setting both ways, as suggested
public void setAccountRole(AccountRole accountRole) {
accountRole.addAccount(this);
this.accountRole = accountRole;
}
entityManager.persist(account); // finally in my DAO
tôi đọc này: JPA/Hibernate: detached entity passed to persistVà những gì tôi hiểu, tôi phải thiết lập các giá trị thực thể từ cả hai hướng, do đó những gì tôi đang làm trong setter của tôi.
Vẫn gặp lỗi.
org.hibernate.PersistentObjectException: detached entity passed to persist: foo.bar.pojo.AccountRole
Cũng lưu ý rằng 'persist()' sẽ tạo đối tượng mà bạn đã truyền một thực thể được quản lý, tuy nhiên, hợp nhất sẽ trả về một bản sao được quản lý của đối tượng bạn đã truyền. Vì vậy, nếu bạn cần một thực thể quản lý sau khi hợp nhất bạn nên làm 'account = entityManager.merge (tài khoản)' Ngoài ra hãy xem [ở đây] (http://stackoverflow.com/a/1070629/1260908) – rumman0786