Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用hibernate的条件和方法_Java_Mysql_Sql_Spring_Hibernate - Fatal编程技术网

Java 使用hibernate的条件和方法

Java 使用hibernate的条件和方法,java,mysql,sql,spring,hibernate,Java,Mysql,Sql,Spring,Hibernate,我有以下疑问: @NamedQuery(name = "User.findByParams", query= "SELECT * FROM User user WHERE user.name type = :inputType") 我希望添加和语句,这将仅在提供输入时发生: @NamedQuery(name = "User.findByParams", query= "SELECT * FROM User user WHERE u

我有以下疑问:

@NamedQuery(name = "User.findByParams", query=
    "SELECT * 
     FROM User user 
     WHERE user.name type = :inputType")
我希望添加
语句,这将仅在提供输入时发生:

@NamedQuery(name = "User.findByParams", query=
    "SELECT * 
     FROM User user 
     WHERE user.name type = :inputType AND (:ageInput != null AND user.age > :ageInput")
这意味着,如果提供了AGENPUT,也可以使用它进行过滤。如果没有-忽略此参数。有什么想法吗


有什么想法吗?

您必须检查
ageInput
是否以代码形式提供,并且必须相应地调用不同的方法。 意味着如果提供了
ageInput
,则您必须调用具有
ageInput
约束的方法,以及不具有
ageInput
约束的调用方法


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

正如前面的发言者所写,您可以使用条件

Criteria criteria = createCriteria()
        .add(Restrictions.eq("type", type));

if (ageInput != null) {
    criteria.add(Restrictions.eq("ageInput", ageInput));
}

List<User> list = criteria.list();
Criteria=createCriteria()
.添加(限制。等式(“类型”,类型));
如果(ageInput!=null){
标准.添加(限制.eq(“ageInput”,ageInput));
}
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();
String sql=“选择*+
“来自用户”+
“其中user.type=:inputType”;
sql+=(ageInput!=null)?“和ageInput=:ageInput:”;
Query Query=sessionFactory.getCurrentSession().createSQLQuery(sql)
.setParameter(“inputType”,inputType);
如果(ageInput!=null){
query.setParameter(“ageInput”,ageInput);
}
return(List)query.List();

不在命名查询中(据我所知)。使用
Criteria
API实现这一点在SQL方式上是不可能的!正如@XtremeBaumer所说,从JPA2开始,您可以使用CriteriaAPI来实现
。。。和(:ageInput==null或user.age>:ageInput)
仔细考虑sql注入。。我将使用category framework/hibernate来构建它