기준 쿼리의 일부로 분리 된 쿼리의 최대 절전 모드
문제
Java 전문가는 다음 SQL 문에 대한 기준 쿼리의 일부로 분리 된 쿼리를 작성하도록 도와 줄 수 있습니다.
select A.*
FROM AETABLE A
where not exists
(
select entryid
FROM AETABLE B
where B.classpk = A.classpk
and B.userid = A.userid
and B.modifiedDate > A.modifiedDate
)
and userid = 10146
해결책
당신은 a 상관 된 하위 쿼리. 속성 / 클래스 이름이 위의 열 / 테이블 이름을 매치한다고 가정합니다.
DetachedCriteria subquery = DetachedCriteria.forClass(AETable.class, "b")
.add(Property.forName("b.classpk").eqProperty("a.classpk"))
.add(Property.forName("b.userid").eqProperty("a.userid"))
.add(Property.forName("b.modifiedDate").gtProperty("a.modifiedDate"));
Criteria criteria = session.createCriteria(AETable.class, "a")
.add(Property.forName("userid").eq(new Integer(10146)))
.add(Subqueries.notExists(subquery);
다른 팁
위의 쿼리에 하나만 추가합니다. EntryID가 기본 키가 아닌 경우 프로젝션을 추가해야합니다.
DetachedCriteria subquery = DetachedCriteria.forClass(AETable.class, "b")
.add(Property.forName("b.classpk").eqProperty("a.classpk"))
.add(Property.forName("b.userid").eqProperty("a.userid"))
.add(Property.forName("b.modifiedDate").gtProperty("a.modifiedDate"))
.add(setProjection(Projections.property("entryId")); // Additional projection property
Criteria criteria = session.createCriteria(AETable.class, "a")
.add(Property.forName("userid").eq(new Integer(10146)))
.add(Subqueries.notExists(subquery);
제휴하지 않습니다 StackOverflow