我有以下使用 Hibernate Criteria API 的代码。
List<?> results = getCurrentSession()
.createCriteria(PersonEvent.class)
.add(Restrictions.eq(STATUS, EventStatus.NEW))
.addOrder( Order.asc("sequence") )
.setLockMode(LockMode.PESSIMISTIC_WRITE)
.setMaxResults(maxResults).list();
它生成以下sql
select
*
from
( /* criteria query */ select
this_.SEQUENCE as SEQUENCE0_0_,
this_1_.CREATED_UTC as CREATED3_0_0_,
this_1_.UPDATED_UTC as UPDATED5_0_0_,
this_1_.STATUS as STATUS0_0_,
this_.PERSONID as PERSONID1_0_
from
ACT.PERSON_EVENT this_
inner join
ACT.EVENT this_1_
on this_.SEQUENCE=this_1_.SEQUENCE
where
this_1_.STATUS='NEW'
order by this_1_.SEQUENCE)
where
rownum <= 50 for update
这导致
ORA-02014: cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.
02014. 00000 - "cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc."
我有两个表 ACT.EVENT (父)和 ACT.PERSON_EVENT (子),使用每个子类继承的 hibernate 表建模并具有一对一关系。所以实体类PersonEvent扩展了抽象实体类Event。
ACT.EVENT
-SEQUENCE (PK)
-STATUS
-CREATED_UTC
-UPDATED_UTC
ACT.PERSON_EVENT
-SEQUENCE (PK, FK)
-PERSONID
如何使用 Criteria API 按顺序编写相同的查询。