Hibernate 保存惰性子对象会导致:TransientObject异常:对象引用未保存的临时实例-在刷新之前保存临时实例
我正在hibernate中尝试惰性加载实体,但无法克服上述错误。我基本上在玩两个实体:用户和角色:Hibernate 保存惰性子对象会导致:TransientObject异常:对象引用未保存的临时实例-在刷新之前保存临时实例,hibernate,jpa,persistence,Hibernate,Jpa,Persistence,我正在hibernate中尝试惰性加载实体,但无法克服上述错误。我基本上在玩两个实体:用户和角色: public class User implements Serializeable { @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "T_USER_ROLE", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(
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 { }
然后,在设置角色和更新之前,我尝试先持久化用户实体,但也失败了:
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);
通过将实体管理器绑定到对话范围并使用seam焊料,可以解决此问题
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
public @interface TempJpa { }
@ExtensionManaged
@ConversationScoped
@Produces
@PersistenceUnit(unitName="tempDataSource")
@TempJpa
private EntityManagerFactory emf;
@Inject
@TempJpa
protected EntityManager em;
但下一个问题是为什么
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)
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
public @interface TempJpa { }
@ExtensionManaged
@ConversationScoped
@Produces
@PersistenceUnit(unitName="tempDataSource")
@TempJpa
private EntityManagerFactory emf;
@Inject
@TempJpa
protected EntityManager em;