Jaa*_*nus 10 java hibernate jpa entitymanager
我有2个实体:Account和AccountRole.
public class Account {
private AccountRole accountRole;
@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
public AccountRole getAccountRole() {
return accountRole;
}
Run Code Online (Sandbox Code Playgroud)
.
public class AccountRole {
private Collection<Account> accounts = new ArrayList<Account>();
@OneToMany(mappedBy = "accountRole", fetch = FetchType.EAGER)
public Collection<Account> getAccounts() {
return accounts;
}
Run Code Online (Sandbox Code Playgroud)
当我从数据库中获取accountRole并试图坚持我的问题时出现问题Account.此时我刚创建了我的帐户,角色已经存在于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
Run Code Online (Sandbox Code Playgroud)
我读到这个:JPA/Hibernate:传递给persist的分离实体 我理解的是,我必须从两个方向设置实体值,以便我在我的setter中做什么.
仍然有错误.
org.hibernate.PersistentObjectException: detached entity passed to persist: foo.bar.pojo.AccountRole
Run Code Online (Sandbox Code Playgroud)
Jaa*_*nus 16
只需更换
entityManager.persist(account);
Run Code Online (Sandbox Code Playgroud)
有:
entityManager.merge(account);
Run Code Online (Sandbox Code Playgroud)
并允许合并级联:
@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER)
public AccountRole getAccountRole() {
return accountRole;
}
Run Code Online (Sandbox Code Playgroud)
因为合并这样做:
如果您的实体是新实体,则它与persist()相同.但是如果您的实体已经存在,它将更新它.
| 归档时间: |
|
| 查看次数: |
25268 次 |
| 最近记录: |