【问题标题】:Saving lazy child is causing: TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing保存懒惰的孩子导致:TransientObjectException:对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例
【发布时间】:2013-05-06 14:23:15
【问题描述】:

我正在休眠中尝试延迟加载实体,但无法克服上述错误。我基本上在玩 2 个实体:用户和角色:

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 { }

然后我有一个创建 User 实体的操作 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)

【问题讨论】:

    标签: hibernate jpa persistence


    【解决方案1】:

    通过将实体管理器绑定到对话范围并使用缝焊来解决此问题。

    @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;
    

    但下一个问题是为什么?

    【讨论】:

      猜你喜欢
      • 2012-03-21
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2019-01-14
      • 2013-03-24
      • 2015-09-27
      相关资源
      最近更新 更多