条件和使用休眠

时间:2017-08-30 10:37:36

标签: java mysql sql spring hibernate

我有以下查询:

@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,也可以使用它进行过滤。如果不是 - 忽略这个参数。有什么想法吗?

有什么想法吗?

2 个答案:

答案 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约束。

或者,您可以使用谓词并执行查询。