使用hibernate条件获取记录哪些列为行

时间:2018-04-17 05:46:49

标签: java spring oracle hibernate hibernate-criteria

我有一个以列为行的表。

现在我想用“和”条件对多行应用限制。我们可以使用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。

请查看附件中的图片

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