[英]how to add Hibernate “createAlias” Child Restriction to parent Entity Restriction
我有一個要求,我需要在父實體(客戶)的名稱和狀態以及子實體Order的名稱屬性上應用搜索關鍵字。
List<Criterion> aliasRestrictionsCriterion = new ArrayList<Criterion>();
Junction quotedLikeRestrictions = Restrictions.disjunction();
quotedLikeRestrictions.add(Restrictions.ilike("customerName", token, MatchMode.ANYWHERE));
quotedLikeRestrictions.add(Restrictions.ilike("customerState", token, MatchMode.ANYWHERE));
restrictions.add(quotedLikeRestrictions);
並在查詢中包含子表,我正在執行以下操作
Criteria alias = criteria.createAlias("order", "order")
.add(Restrictions.ilike("order.name", token, MatchMode.ANYWHERE));
Hibernate正在生成以下查詢,但我需要將諸如order.name這樣的比較添加到父塊中。
CUSTOMER this_ inner join ORDER order_ on this_.ORDER_ID=order_.ORDER_ID where
(lcase(this_.name) like ? or lcase(this_.state) like ?) and (lcase(order_.NAME)
like ?)
我想要的是將(lcase(order_.NAME)像?)放在父塊中。 所以我想要的是以下
(lcase(this_.name)如?或lcase(this_.state)如?或lcase(order_.NAME)如?)
我該如何實現?
更新:這就是我所說的標准
protected List getEntities(List<Criterion> restrictions, String aliasSearchToken) {
Session session = currentSession();
Criteria criteria = session.createCriteria(getEntityClass());
// apply restrictions.
if (restrictions != null) {
for (Criterion criterion : restrictions) {
criteria.add(criterion);
}
}
Criteria alias = criteria.createAlias("order", "order").add(Restrictions.ilike("order.name", searchToken, MatchMode.ANYWHERE));
List list = criteria.list();
if (list != null) {
return list;
}
return Collections.emptyList();
}
更新2:
protected List getEntities(List<Criterion> restrictions, String aliasSearchToken) {
Session session = currentSession();
Criteria criteria = session.createCriteria(getEntityClass());
Junction or = Restrictions.disjunction();
or.add(Restrictions.ilike("order.name", searchToken, MatchMode.ANYWHERE));
criteria.createAlias("order", "order").add(or);
// apply restrictions.
if (restrictions != null) {
for (Criterion criterion : restrictions) {
criteria.add(criterion);
}
}
List list = criteria.list();
if (list != null) {
return list;
}
return Collections.emptyList();
}
在客戶this_.ORDER_ID = order_.uid上從客戶this_內部聯接ORDER order_中產生了選擇.......其中(lcase(order_.NAME)如?)和(lcase(this_.name)如?或lcase(this_。狀態),像?)
orderName只是在第二個或語句之前,但仍不在第二個或語句中……我很困惑。
好吧,為了將限制添加到條件中(創建一個AND),必須將其添加到quotedLikeRestrictions
取中:
quotedLikeRestrictions.add(Restrictions.ilike("order.name", token, MatchMode.ANYWHERE));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.