Sql 如何使用动态输入构造hibernate查询?

Sql 如何使用动态输入构造hibernate查询?,sql,hibernate,Sql,Hibernate,我有一种情况,我想构造一个hibernate查询,其中我的API接受动态输入 如中所示,客户端可以指定是否要将{column1}或{column1,column2}或{column1,column2,column3}作为输入传递给API 如果他们只通过第1列,我将使用第1列进行查询。如果它们通过{column1,column2},我将使用column1&column2进行查询。等等 关于在hibernate中构造这样的查询有什么建议吗?查看 对于一些虚构的例子,你可以这样写 public Lis

我有一种情况,我想构造一个hibernate查询,其中我的API接受动态输入

如中所示,客户端可以指定是否要将{column1}或{column1,column2}或{column1,column2,column3}作为输入传递给API

如果他们只通过第1列,我将使用第1列进行查询。如果它们通过{column1,column2},我将使用column1&column2进行查询。等等

关于在hibernate中构造这样的查询有什么建议吗?

查看

对于一些虚构的例子,你可以这样写

public List<User> getAllUsersForConditions(String firstName, String lastName, int age) throws RepositoryException {
    Criteria criteria = getCurrentSession().createCriteria(User.class);
    if (firstName != null) {
        criteria.add(Restrictions.eq("firstName", firstName));
    }
    if (lastName != null) {
        criteria.add(Restrictions.eq("lastName", lastName));
    }
    if (lastName != null) {
        criteria.add(Restrictions.eq("age", age));
    }
    return (List<User>) criteria.list();
}
public List getAllUsersForConditions(String firstName、String lastName、int age)抛出RepositoryException{
Criteria=getCurrentSession().createCriteria(User.class);
if(firstName!=null){
标准.添加(限制.eq(“名字”,名字));
}
if(lastName!=null){
添加(Restrictions.eq(“lastName”,lastName));
}
if(lastName!=null){
标准.增加(限制.情商(“年龄”),年龄);
}
返回(列表)条件。列表();
}
另外,如果您有上面示例中的简单查询,那么您可以使用like@Leo said

但是,如果您有复杂的结构,那么这种带有标准的方法将起作用。如果您的搜索更加复杂,那么您应该使用


希望有帮助。

如果列是简单属性,那么使用QBE很容易——但是如果列是其他实体的外键,那么你就注定要失败