我有一个简单的查询很好地工作了一段时间,现在我将代码中的一些内容改为:
(hibernate.cfg.xml)
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>
和以下代码:
public UserEn findByIDFetch(Long id, String... fetches) {
beginTransaction();
DetachedCriteria dc = DetachedCriteria.forClass(UserEn.class);
for (String fetch : fetches) {
dc.createAlias(fetch, fetch, JoinType.INNER_JOIN);
}
dc.add(Restrictions.eq("id", id));
UserEn result = (UserEn) dc.getExecutableCriteria(getSession()).uniqueResult();
commitTransaction();
return result;
}
提交后,result对象不会加载列表(即从Fetchs
开始)
如果我执行result.GetAnyList().Size();
在提交前,它会保持加载状态,而且,如果我使用HQL
它工作得很好。(但这不是它应该如何工作(让它在使用时打开并加载),createAlias应该一如既往地正常工作)
看起来DetachedCriteria的createAlias没有获取给定路径(在本例中为CharacterenList
)
@edit
我发现,如果我在所需路径中使用setfetchmode
(在本例中为characterenlist
)提取可以工作,但如果我使用createalias
(像往常一样),它就会停止工作,我不知道是怎么回事,可能是hibernate bug或其他什么,不管怎样,我会等待有人回答,也许是有同样问题的人...
发现同样的问题如下:https://hibernate.atlassian.net/browse/hhh-7842这可能是一个bug,如果我要求它在别名中是inner join,它应该是,我可以用HQL做到这一点,为什么我不能用标准做呢?
所以,现在我将不得不使用left_outer_join
类型来解决这个问题,或者根本不使用别名(如果我不需要创建where子句或2深度提取)
希望能帮助到别人,谢谢你的帮助!
示例
dc.createAlias(fetch, fetch, JoinType.LEFT_OUTER_JOIN);
或
dc.setFetchMode(fetch, FetchMode.JOIN);
当然,这些列表有setter和getter。现在我想实现以用户身份不参加这些事件的可能性。因此,我尝试了以下方法: 我得到的例外情况如下: 尽管我使用了一些方法来确保执行惰性提取:
问题内容: 我有一个返回用户对象的简单控制器,该用户的属性坐标具有hibernate属性FetchType.LAZY。 当我尝试获取该用户时,我总是必须加载所有坐标才能获取用户对象,否则,当杰克逊尝试序列化User时,将抛出异常: :无法初始化代理-没有会话 这是由于Jackson尝试获取此未获取的对象。这里是对象: 和控制器: 有一种方法告诉杰克逊不要序列化未提取的对象?我一直在寻找3年前发布的
我的理解是,默认情况下,Hibernate将所有关系类型的FetchType设置为lazy。 在我的例子中,我有一个双向的OneToMany-ManyToOne关系,如下所示: 另一个问题是我如何得到一个有特定名字的孩子?是否可以通过存储库进行操作?还是需要getChildren(parentId)并迭代直到找到以特定方式命名的那个? 编辑:在一些建议之后,我继续这样实现了我的ChildRepos
很抱歉没有提供实际的代码,我的情况完全符合jackson中的问题--不要序列化惰性对象。由于这个问题没有解决方案,所以我强调了这个问题,以确保是否有解决方案,或者在本例中使用什么方法,而不是使用Jackson以JSON格式作为响应发送给对象。 谢谢
问题内容: 我有一个返回用户对象的简单控制器,该用户的属性坐标具有hibernate属性FetchType.LAZY。 当我尝试获取该用户时,我总是必须加载所有坐标才能获取用户对象,否则,当杰克逊尝试序列化User时,将抛出异常: com.fasterxml.jackson.databind.JsonMappingException:无法初始化代理-没有会话 这是由于Jackson尝试获取此未获取
如果我有一个实体和一些惰性集合(、、,...),并且希望编写一个JpaRepository-method,该方法为我提供所有的人,这些人都渴望获取,这可能吗? 我知道人们可以在单个物体上做到这一点,但这在某种程度上可以在人的集合上做到吗?