Java Hibernate无实体间关系的条件查询
我有两张桌子:Java Hibernate无实体间关系的条件查询,java,hibernate,criteria,hibernate-criteria,Java,Hibernate,Criteria,Hibernate Criteria,我有两张桌子: A (x, y, z, date1, date2) B (t, date1, date2) 我想执行如下查询: SELECT A.x, A.y, A.z, A.date1 FROM A, B WHERE A.date1 < B.date1 AND (A.date2 is null or A.date2 <= B.date2 ) ORDER BY A.x DESC; 如何使用Hibernate标准实现这一点?使用子查询。像这样的 select a
A (x, y, z, date1, date2)
B (t, date1, date2)
我想执行如下查询:
SELECT A.x, A.y, A.z, A.date1
FROM A, B
WHERE A.date1 < B.date1
AND (A.date2 is null or A.date2 <= B.date2 )
ORDER BY A.x DESC;
如何使用Hibernate标准实现这一点?使用子查询。像这样的
select a,b,c,date3
from A
where date3 is null or
date3 < (select p.date1 from P p)
order by a desc;
然而!如果实体之间没有映射关系,这不是Hibernate的设计目的,直接使用SQL可能更好。我不想编写SQL、hql或jpql。我想通过使用Criteria API获得结果。@mmdemirbas做了一些类似于我在Criteria API中的建议的事情。虽然如果这个查询是一项有效的业务,您的域映射应该允许它。您能解释一下什么是colDateId和dateIdValue吗?
String dateIdValue = "...";
Class<?> mainClass = A.class;
Class<?> dateClass = B.class;
String colDate1 = "date1";
String colDate2 = "date2";
String colDateId = "id";
Property date1Prop = Property.forName(colDate1);
Property date2Prop = Property.forName(colDate2);
DetachedCriteria date1Criteria = DetachedCriteria.forClass(dateClass)
.setProjection(date1Prop)
.add(Restrictions.eq(colDateId, dateIdValue));
DetachedCriteria date2Criteria = DetachedCriteria.forClass(dateClass)
.setProjection(date2Prop)
.add(Restrictions.eq(colDateId, dateIdValue));
Criteria criteria = getSession().createCriteria(mainClass)
.add(date1Prop.lt(date1Criteria))
.add(Restrictions.or(date2Prop.isNull(), date2Prop.le(date2Criteria)))
.addOrder(Order.desc("x"));
/*
SELECT A.*
FROM A, P
WHERE A.date1 < P.date1
AND (A.date2 is null or A.date2 <= P.date2 )
ORDER BY A.x DESC;
*/