首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate-JPA:要在查询结果中返回的选择项

Hibernate-JPA:要在查询结果中返回的选择项
EN

Stack Overflow用户
提问于 2019-12-27 19:10:27
回答 1查看 43关注 0票数 1

下面给出了一个来自网络文章的代码片段,它描述了JPA标准API的Hibernate用法。我已经验证了代码是否有效,没有任何问题。我的问题是关于criteriaQuery.multiselect(empRoot, deptRoot);的声明

如果上面提到的方法是在“流利风格”中调用的,我就没有问题了。但是,很明显,这种方法有副作用,因为如果我试图注释掉它(因为结果没有存储在任何变量中),就会引发实时异常。

,那么当调用 criteriaQuery.multiselect(...) 方法时,到底会发生什么呢?

代码语言:javascript
复制
package com.boraji.tutorial.hibernate;

import java.util.List;

import javax.persistence.criteria.*;

import org.hibernate.*;
import org.hibernate.query.Query;

import com.boraji.tutorial.hibernate.entity.Department;
import com.boraji.tutorial.hibernate.entity.Employee;

public class CriteriaQueryExample6 {

   public static void main(String[] args) {

      Transaction transaction = null;
      try (Session session = HibernateUtil.getSessionFactory().openSession()) {
         transaction = session.beginTransaction();

         CriteriaBuilder builder = session.getCriteriaBuilder();

         // Using FROM and JOIN
         CriteriaQuery<Object[]> criteriaQuery = builder.createQuery(Object[].class);
         Root<Employee> empRoot = criteriaQuery.from(Employee.class);
         Root<Department> deptRoot = criteriaQuery.from(Department.class);
         criteriaQuery.multiselect(empRoot, deptRoot);
         criteriaQuery.where(builder.equal(empRoot.get("department"), deptRoot.get("id")));

         Query<Object[]> query=session.createQuery(criteriaQuery);
         List<Object[]> list=query.getResultList();
         for (Object[] objects : list) {
            Employee employee=(Employee)objects[0];
            Department department=(Department)objects[1];
            System.out.println("EMP NAME="+employee.getName()+"\t DEPT NAME="+department.getName());
         }
         transaction.commit();
      } catch (Exception e) {
         e.printStackTrace();
         if (transaction != null) {
            transaction.rollback();
         }
      }
   }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-28 09:35:09

它只是告诉JPA您想要做一个投影。

在你的例子中,部门的雇员。

这样,结果将包含第一行中的Employee实体和第二行中的Department实体。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59505070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档