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来构建它