编程语言
首页 > 编程语言> > java – 使用可选参数在HQL中动态搜索查询?

java – 使用可选参数在HQL中动态搜索查询?

作者:互联网

我正在开发一个我需要搜索功能的应用程序,我想编写根据参数动态创建的HQL查询.
目前我有4个参数,而搜索所有参数是必需的,或者根据用户想要搜索的方式需要1或2或3个参数.

public List<Plot> fetchSearchedPlots(int plotType, String plotSize, String min, String max)
    {
        Session session = sessionFactory.getCurrentSession();
        List<Plot> searchedLists = new ArrayList<Plot>();
        String query = "FROM Plot where type = ? and size = ? and price >= ? and price <= ?";
        searchedLists = (List<Plot>)session.createQuery( query )
                .setInteger( 0, plotType )
                .setString( 1, plotSize )
                .setString( 2, min )
                .setString( 3, max ).list();
        return searchedLists;
    }

这是我对所有4个参数的一般查询,现在我必须编写一个搜索查询,其中我使用多个可选参数,如何使用可选参数进行此查询?请将我的查询转换为动态可选参数查询?
谢谢

解决方法:

动态查询的另一种变体是使用Criteria API:

Criteria crit = session.createCriteria(Plot.class);
if (status != null) {
      crit.add(Restrictions.eq("status", status));
}
// other where clauses

对于基于输入的动态条件创建问题的变体:

Criteria criteria = session.createCriteria(Plot.class);;
    if(type != null) {
        criteria.add(Restrictions.eq("type", type));
    }
    if(size != null) {
        criteria.add(Restrictions.eq("size", size));
    }
    if(min != null && max != null) {
        criteria.add(Restrictions.between("price", min, max));
    }
    List<Case> searchedLists  = criteria.list();
    return searchedLists;

标签:java,hibernate,hql,dynamicquery
来源: https://codeday.me/bug/20190824/1704776.html