我有以下查询:
@NamedQuery(name = "User.findByParams", query=
"SELECT *
FROM User user
WHERE user.name type = :inputType")
我希望添加AND
语句,只有在提供输入时才会发生:
@NamedQuery(name = "User.findByParams", query=
"SELECT *
FROM User user
WHERE user.name type = :inputType AND (:ageInput != null AND user.age > :ageInput")
这意味着如果提供了ageInput,也可以使用它进行过滤。如果不是 - 忽略这个参数。有什么想法吗?
有什么想法吗?
答案 0 :(得分:1)
如前面的发言者所写,您可以使用标准
Criteria criteria = createCriteria()
.add(Restrictions.eq("type", type));
if (ageInput != null) {
criteria.add(Restrictions.eq("ageInput", ageInput));
}
List<User> list = criteria.list();
或SQLQuery
String sql = "SELECT * " +
"FROM User user " +
"WHERE user.type = :inputType ";
sql += (ageInput != null) ? "AND ageInput = :ageInput " : "";
Query query = sessionFactory.getCurrentSession().createSQLQuery(sql)
.setParameter("inputType", inputType);
if(ageInput != null) {
query.setParameter("ageInput", ageInput);
}
return (List<User>) query.list();
答案 1 :(得分:0)
您必须检查代码中是否提供了ageInput
,并且必须相应地调用不同的方法。
表示如果提供ageInput
,则必须调用具有ageInput
约束o / w调用方法的方法,该方法没有ageInput
约束。
或者,您可以使用谓词并执行查询。