我有一个以列为行的表。
现在我想用“和”条件对多行应用限制。我们可以使用hibernate标准吗?
示例:Employee
表
Pk ColumnName. Value
------------------------
1. Empid. 10
1 EmpName. Sachin
1. Empsalary. 10,000
2 Empid. 20
2 EmpName. Dhoni
2. Empsalary. 8000
现在我想获取pk,其中EmpName
为sachin,empsal
为10,000
所以它应该将pk返回为1。
请查看附件中的图片
答案 0 :(得分:0)
您可以使用条件查询从数据库中获取数据的主键列表。请按照以下代码段:
EntityManager enm = sessFact.createEntityManager();
CriteriaBuilder en = sessFact.getCriteriaBuilder();
CriteriaQuery<Integer> qu = en.createQuery(Integer.class);
Root<Employee> ro = qu.from(Employee.class);
qu.select(ro.get("id"));
qu.where(en.like(ro.get("empName"), "Sachin%"), en.equal(ro.get("empSalary"), 10000 ));
List<Integer> list= enm.createQuery(qu).getResultList();
for (Integer name : list) {
System.out.println("PK: " + name);
}
在where子句中,您可以删除&#34;%&#34; 并提供确切的搜索,例如qu.where(en.like(ro.get("empName"), "Sachin"), en.equal(ro.get("empSalary"), 10000 ));
hibernate生成的等效SQL日志如下:
Hibernate:从员工employee0_中选择employee0_.id为col_0_0_,其中(employee0_.emp_name喜欢?)和employee0_.emp_salary = 10000
仅供参考,参考数据库表结构如下:
创建表
employee
(
id
int(11)NOT NULL AUTO_INCREMENT,
emp_name
varchar(100)DEFAULT NULL,
emp_address
varchar(500)DEFAULT NULL,
emp_mobile_nos
varchar(100)DEFAULT NULL,emp_salary
int(12)DEFAULT NULL,
主要关键(id
)
)ENGINE = InnoDB DEFAULT CHARSET = latin1;
请在此处找到与GIT中的Hibernate相关的完整代码 - https://github.com/ctmithun/HibernateExample/blob/master/Hibernate5Annotation/src/net/roseindia/GetAllData.java