我正在开发一个需要搜索功能的应用程序,我想编写根据参数动态创建的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个参数的常规查询,现在我必须编写一个搜索查询,在其中使用多个可选参数,如何使用可选参数进行此查询?请将我的查询转换为动态可选参数查询?谢谢
我这样自己转换查询
Session session = sessionFactory.getCurrentSession(); List<Plot> searchedLists = new ArrayList<Plot>(); Map<String, Object> params = new HashMap<String,Object>(); String hqlQuery = "from Plot where societyBlock.societyBlockId = :societyBlock"; params.put( "societyBlock", societyId ); if(plotType != null) { hqlQuery += " and type.typeId = :type"; params.put( "type", plotType ); } if(!plotSize.isEmpty() && plotSize != null && !plotSize.equals( "" )) { hqlQuery += " and size = :size"; params.put( "size", plotSize ); } if(min != null) { hqlQuery += " and price >= :pricemin"; params.put( "pricemin", min ); } if(max != null) { hqlQuery += " and price <= :pricemax"; params.put( "pricemax", max ); } Query query = session.createQuery( hqlQuery ); for (String str : query.getNamedParameters()) { query.setParameter( str, params.get( str ) ); } searchedLists = (List<Plot>) query.list(); System.out.println( searchedLists.size() ); return searchedLists;