我有两个类(一个和两个)和两个相应的表(“一个”和“两个”)。每个表都有一个时间列(“timeOne”和“timeTwo”)。
我想在一个查询中从这两个表中获取最后10个结果。基本上,如果我在表中有30行“one”并且今天已经添加了3行,而我的表2有30行,今天已经添加了7行,我的查询应返回10行(3个来自1行,7行来自2行) )。
如果可能,我想在单个Hibernate查询中执行此操作。
答案 0 :(得分:0)
我认为使用原生查询最简单。
我这样说是因为替代方案是你在JPQL中使用这样的东西:
Query q = entityManager
.createQuery("select f, b from Foo f, Bar b");
q.setMaxResults(2);
产生以下SQL:
select foo0_.id as id0_0_, bar1_.id as id1_1_, foo0_.val as val0_0_, bar1_.val as val1_1_ from dbo.Foo foo0_ cross join dbo.Bar bar1_ limit ?
(请注意,为了简洁,我省略了排序,但您可以order by
)
我相信你会从交叉连接中获取(maxResults * maxResults)行,虽然你可以将结果集折叠到不同的实体......但它不太可能是你想要的(它也不会是你想要的)尽可能高效。)
因此,使用原生查询不是试图处理上述混乱,而是最简单(编程)和最有效。
简而言之:不,据我所知,您不能通过JPA或Hibernate以您生成类型安全结果附加到持久性单元的方式执行您想要执行的操作。< / p>