我有两个类(一和二)和两个相应的表(“一”和“二”)。每个表都有一个时间列(“timeOne”和“timeTwo”)。
我想在一个查询中从这两个表中获取最后 10 个结果。基本上,如果我在表“一”中有 30 行并且今天添加了 3 行,而我的表 2 有 30 行并且今天添加了 7 行,那么我的查询应该返回 10 行(1 中的 3 行和 2 中的 7 )。
如果可能,我想在单个 Hibernate 查询中执行此操作。
我认为使用本机查询是最简单的。
我这样说是因为另一种选择是你在 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 以产生附加到持久性单元的类型安全结果的方式做您想做的事情。