public class Company{
private Long id;
private String companyName;
private List<Employee> employees;
}
public class Employee{
private Long empid;
private String fstName;
private String lstName;
private String sal;
private Company company;
}
使用Hibernate标准api,我想构建以下SQL
select compantName from company c,employee e where c.id = e.companyid and
(e.firstName like '%john%' and e.lastname like '%doe% ) or
(e.firstName like '%james%' and e.lastname like '%bond% ) or
(e.firstName like '%mike%' and e.lastname like '%adams% )
假设UI用户可以搜索名字或姓氏或sal或公司名称或任何一个 组合
同样更重要的是,用户可以一次搜索多名员工
我想出了以下代码。请建议上面处理的最佳方法是什么 要求
DetachedCriteria criteria = DetachedCriteria
.forClass(Company.class);
criteria.createAlias("employees","employees");
Disjunction or = Restrictions.disjunction();
for(Employee emp : employees){
or.add(Restrictions.and(Restrictions.ilike(
"employees.fstName",emp.getFstName(), MatchMode.ANYWHERE),
Restrictions.ilike(
"employees.lstName",emp.getLstName(), MatchMode.ANYWHERE)));
criteria.add(or);
}
答案 0 :(得分:0)
var criteria = DetachedCriteria.forClass(Company.class)
.CreateAlias("employees","emp",JoinType.LeftOuterJoin)
使用上面获得的标准,您可以根据需要添加限制。
使用Restrictions.ilike("emp.<propertyName>"...
添加对Employee
的限制
使用Restrictions.ilike("this.<propertyName>"...
添加对Company
的限制。
您可以在Restrictions.Or()
和Company
的限制之间使用Employee
Restrictions.And()
的限制之间的Employee
。
JoinType
可帮助您选择公司实体,而不管Employee
s
查看this以更好地了解在Hibernate中使用ICriteria
。
特别注意使用CreateAlias
和CreateCreteria
,以帮助您有效地添加Restrictions
。
希望这可以作为制定标准的指南。
添加此部分以解释如何添加条件值。
将Search
视为容器对象,将信息从View访问到数据访问层。
public class Search{
private String Value;
//getter and setter...
}
在您的数据访问层中,您可以从顶部代码段获取条件并使用
search.getValue()!=null && !"".equals(search.getValue()){
criteria.Add(Restrictions....);
}