0
我在休眠中試驗延遲加載實體,但無法克服上述錯誤。我基本上有2個實體玩:用戶和角色:保存懶惰的孩子導致:TransientObjectException:對象引用未保存的瞬態實例 - 在沖洗前保存瞬態實例
public class User implements Serializeable {
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "T_USER_ROLE", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
private Set<Role> roles = new HashSet<Role>();
}
public class Role implements Serializeable { }
然後,我有一個動作的bean創建用戶實體,我們稱這種方法1:
user.getRoles().add(roleService.findByName(RolesEnum.ADMIN.toString()));
em.persist(user);
然後我試着堅持用戶第一實體設置的角色和更新前,但它也失敗:
userService.create(user);
User user = userService.findById(user.getId());
Set<Role> roles = new HashSet<Role>();
roles.add(roleService.findByName(RolesEnum.MEMBER.toString()));
user.setRoles(roles);
userService.update(user, true);
需要注意的是:
- userService.create =堅持
- userService.update =合併
- 成員角色已存在於角色表
- 我也試圖獲取角色:entity.getRoles();
下面是完整的錯誤日誌:
java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.test.Role org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1374)