
Hibernate使用outer join fetch集合时返回重复的结果
coding五月 21, 20161mins
Hibernate 经验错误
问题H2
如果我们有一个订单关联三个订单项,当进行下面的查询时
bash
List result = session.createQuery("select o from Order o left join fetch o.lineItems").list();
返回的结果集会是三个一样的订单对象,分别包含了三个订单项。
原因H2
首先在SQL层面LEFT JOIN会以左表为驱动表去关联从表的中的所有记录。以上面的的订单为例,就会返回三条纪录。而Hibernate默认会保留所有的驱动表中的记录,多余的两条记录会引用同一条订单记录。
解决H2
bash
List result = session.createQuery("select o from Order o left join fetch o.lineItems").setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) // Yes, really!.list();
或者
bash
List result = session.createQuery("select distinct o from Order o left join fetch o.lineItems").list();
后者的意义和SQL的distinct并不一样,这里它就是DISTINCT_ROOT_ENTITY result transformer的缩写。
评论
新的评论
上一篇
Jackson转换TimeStamp时空字串的问题
问题 当使用Jackson进行json数据转换时,如果目标字段类型为TimeStamp并且要转换的值为空字串时会报空指针错误。 原因 下面是Timestamp反序列化器的代码 通过 _parseDate 方法转换为Date后,并没有判断是否转换成功而直接调用了getTime方法…
下一篇
Spring AOP的实现
概念 Aspect 切面,指的是切分多个类的模块化的关注点,包括Pointcut或Advice Join point 程序的执行点, 可用于插入代码 (在Spring里面指的是方法的执行) Advice 对特定的Join point执行的动作 Pointcut 匹配Join p…
