HQL not likeクエリ
今日はヒップホップのRestrictionsでnot likeで調べたいですが、Resticationsはnotとlikeの方法がないということが分かりました。ilikeは大きさを区別しないで書くというあいまいな検索を表しています。Retrictions.not(Restictions.like)で調べたいですが、Hyberrateで生成されたSQL文を調べたら、not propertyName like valueが出ました。
後の結果はRestictionsがsql Restricationの方法を発見しました。使えます
Restrictions.sql Restication(「VERFYuRECORD not like%」+value+「%」);
VERFY_RECORDはnullまたはvalue文字列を含めて使用できます。
Restrictions.sql Restication("(VERFYuRECORD is null or VERFYURECORD not like'%) + ssoUser.getUserType()+「%」)
他の条件があれば、以下のようにすることができます。
criterion.add()の中のHibernateはいずれもそれをSQL文whereの後のandとしてつなぎます!
後の結果はRestictionsがsql Restricationの方法を発見しました。使えます
Restrictions.sql Restication(「VERFYuRECORD not like%」+value+「%」);
VERFY_RECORDはnullまたはvalue文字列を含めて使用できます。
Restrictions.sql Restication("(VERFYuRECORD is null or VERFYURECORD not like'%) + ssoUser.getUserType()+「%」)
他の条件があれば、以下のようにすることができます。
List<Criterion> criterion = new ArrayList<Criterion>();
ReportSSOUser ssoUser = (ReportSSOUser) UserInfoUtils.getCurrentLoginUser();
if (StringUtils.isNotBlank(engineering_id)) {
criterion.add(Restrictions.eq("engineering_id", engineering_id));
} else {
criterion.add(Restrictions.eq("engineering_id", ssoUser.getEngineeringId()));
}
if (StringUtils.isNotBlank(ssoUser.getSectionId())) {
criterion.add(Restrictions.eq("section_id", ssoUser.getSectionId()));
}
if (StringUtils.isNotBlank(model.getReport_id())) {
criterion.add(Restrictions.eq("report_id", model.getReport_id()));
}
criterion.add(Restrictions.eq("report_status", RptReportInstance.REPORT_STATUS_WAIT_APPROVAL));
//
if (ssoUser.getUserType() != null) {
criterion.add(Restrictions.sqlRestriction("( VERIFY_RECORD is null or VERIFY_RECORD not like '%"
+ ssoUser.getUserType() + "%' )"));
}
まとめは以下の通りですcriterion.add()の中のHibernateはいずれもそれをSQL文whereの後のandとしてつなぎます!