如果输入任何字段,我需要从DB获取详细信息,字段如下
日期
代码
操作
状态
用户名
的应用。
请帮助我,因为可以输入任何字段,并且不一定需要输入所有值。
谢谢&问候, Jafer
答案 0 :(得分:0)
您可以简单地测试以下字段是否为空或null,如果不为null或为空则添加限制。例如。
//assuming you have Person.class
Criteria cr = session.createCriteria(Person.class);
//prevent to add restrictions if date is null
if(date !=null)
cr.add(Restrictions.eq("date", date));
if(!username.equals(""))
cr.add(Restrictions.eq("userName"),username);
//test other fields
List results = cr.list();
//return results
了解更多基本信息。您可以查看this。
答案 1 :(得分:0)
public List searchAccommodation(Date startDate, Date endDate, Country country, AccommodationType type, Integer capacity)
Criteria criteria = session.createCriteria(Accommodation.class);
if (startDate != null) {
criteria.add(Expression.ge("availabilityDate",startDate);
}
if (endDate != null) {
criteria.add(Expression.le("availabilityDate",endDate);
}
if (country != null) {
criteria.add(Expression.eq("country",country);
}
if (capacity != null) {
criteria.add(Expression.ge("capacity",capacity);
}
if (type != null) {
criteria.add(Expression.eq("type",type);
}
List results = criteria.list();
//
// Execute the query
//
return query.list();
}
答案 2 :(得分:0)
标准不适合这种情况。我建议你动态构建HQL!
答案 3 :(得分:0)
HQL VS Criteria API - 性能
每次使用criteriaQuery HQL
名称触发查询时,CriteriaQuery
和it creates a new alias for the table
之间的性能存在差异,该名称不会反映在任何数据库的上次查询缓存中。这导致编译生成的SQL的开销,花费更多的时间来执行。
条件尊重映射中的延迟设置,并确保加载要加载的内容。这意味着一个Criteria查询可能会导致多个SQL立即SELECT语句来获取具有所有非延迟映射关联和集合的子图。如果你想改变"怎么"甚至" what",使用setFetchMode()来启用或禁用特定集合或关联的外连接提取。 Criteria查询也完全尊重提取策略(join vs select vs subselect)。
HQL 尊重映射中的延迟设置,并确保加载要加载的内容。这意味着一个HQL查询可能会导致多个SQL立即SELECT语句获取具有所有非延迟映射关联和集合的子图。如果你想改变"怎么"甚至" what",使用LEFT JOIN FETCH为特定集合或可空的多对一或一对一关联启用外连接提取,或使用JOIN FETCH启用内连接提取不可为空的多对一或一对一关联。 HQL查询不尊重任何fetch =" join"在地图文档中定义。