在传递JPA repo方法的情况下防止会话失败

时间:2017-03-27 11:44:55

标签: hibernate jpa spring-data-jpa spring-transactions transactional

在以下情况下,使用JPA存储库阻止无会话失败的方法是什么:

我有一个名为X的类,关系为@OneToManyfetch = FetchType.LAZY为Y类。我在repostiory中创建整个方法,然后将其传递给Service类,之后我传递给它到控制器。

虽然我想通过x.getY()通过Lazy fetchType获取来自X类的对象Y,但我得到一个名为 no session 的错误(来自Hibernate)。< / p>

如何防止此错误发生?

1 个答案:

答案 0 :(得分:1)

您必须将x.getY()调用包含在@Transactional方法中,或者将事务边界移到调用层次结构中更高的位置,以便包含调用。

一般情况下,我不会高于服务,所以如果你第一次在Controller中访问该属性,那么其他可能的选择是:

  • 在会话仍然打开(加入提取)时急切地获取所有必需的依赖项
  • 在事务上下文中使用Hibernate.initialize(x.getY());
  • 在依附集合上调用size方法初始化它们x.getY().size