Spring Boot + Hibernate -在两个级别的子Hibernate对象上延迟初始化错误



我觉得这个问题以前已经讨论过了,但是我找不到一个可靠的答案。当我试图访问惰性加载的hibernate对象时,我得到了一个LazyInitializationException...no Session。我通过Spring Boot来做这个。

假设我有三个Hibernate对象,Table1,Table2&Table3Table1Table2有一对多的外键引用&Table2Table3有一对多的外键引用。每个外键引用都是LAZY加载的(我认为这个问题也发生在一对一关系中,但不是100%确定)

Table1的代码如下:

@OneToMany(mappedBy = "table1", fetch = FetchType.LAZY)
private Set<Table2> table2s;
//and corresponding getter method
public Set<Table2> getTable2s(){
return table2s
}

Table2类中引用Table3使用相同的模式。

我希望我能写出以下代码:

Table1 table1 = tableOneRepository.getOne(...);
Set<Table2> table2s = table1.getTable2s()
singleTable2 = table2s.iterator().next() // just get any one element, assume set in not empty
Set<Table3> table3s = singleTable2.getTable3s() // "no session" error

但是,最后一行总是产生这样的错误:

Caused by: org.hibernate.LazyInitializationException: could not initialize proxy [com...] - no Session

注意,这个问题在第一次惰性加载时不会发生,它总是在从一个对象进行惰性加载时发生

我已经看到了很多关于添加@Transactional方法的建议,但它没有工作。帮助吗?

我们需要更多的信息。首先是实体的声明。可能少了点什么。然后是更多的代码。这里我们甚至没有函数

的声明即使它可能不是真正的原因,检查您已经导入了spring事务性注释而不是javax注释

编辑:据我所知,我还使用过"nested"像这样的物体。不确定,但可能有效:在检索singleTable2之后尝试这样做。当你访问一个对象的时候,我不记得你必须这样做,但是不管怎样,试一下

Hibernate.initialize(singleTable2)

最新更新