我有一个Request
对象,可以有多个Authors
。映射已正确定义。
在Criteria API中,我定义了一个对AUTHORS_T进行Join的限制。
Criteria criteriaQuery = session.createCriteria(Request.class);
// Create alias for Authors table
criteriaQuery.createAlias("Authors", "auth", JoinType.INNER_JOIN);
// Define restriction: LIKE on auth.firstName / auth.LastName
String authorNameForQuery = "%" + searchCriteria.getAuthorName().trim() + "%";
Disjunction firstOrLast = Restrictions.disjunction();
firstOrLast.add(Restrictions.ilike("auth.lastname", authorNameForQuery) )
.add(Restrictions.ilike("auth.firstname", authorNameForQuery) )
criteriaQuery.add(firstOrLast);
产生的SQL:
select ... // one-by-one
from requests_t _this
inner join authors_t auth_ on this_.ID = auth_.REQUEST_ID
where ...
一切正常,但我收到每个作者的多个相同请求。
例如如果RequestID=111
有4个author
,我会得到4个结果,但我只能得到1个。这是INNER JOIN的结果。
我在Criteria API中是否有办法避免这种情况并获取Distinct Request对象?