Hibernate语法同时使用fetch / select

时间:2011-11-23 14:53:27

标签: hibernate select fetch

我在使用hibernate混合和匹配提取以及选择时遇到了一些麻烦。 基本上,我在一个用户表中列出了一堆用户,其中还包含一个“createdBy”列,该列通过id引用用户表 例如:

id  | name | foo | createdBy
----------------------------
1     abc    zzz   2
2     def    zzz   2

所以,在上面的例子中,我希望为“abc”的createdBy列返回“def”用户的实例

因此,如果没有createdBy,我的查询看起来像:

from User u inner join fetch e.foo as foo inner join fetch foo.bar as bar

我如何插入

"select User u2 from User where u2.id=u.createdBy" 

进入上一个查询?

1 个答案:

答案 0 :(得分:1)

假设createdBy实体中User被映射为惰性ManyToOne,您将以与其他联接完全相同的方式将其包含在查询中:

from User u
  join fetch u.foo as foo
  join fetch foo.bar as bar
  join fetch u.createdBy

如果它没有映射为ManyToOne(为什么不呢?)而只是映射了它的ID,你将不得不使用交叉连接 AND 你要么转换查询结果(通过自定义构造函数或ResultTransformer实现)或将它们作为List<Object[]>使用,就像它们将成为的那样:

select u, u2
  from User u, User u2
    join fetch u.foo as foo
    join fetch foo.bar as bar
 where u.createdBy = u2.id

毋庸置疑,第一个选项(将createdBy映射为ManyToOne)要简单得多。