hibernate - Hibernate HQL createQuery()list()类型强制转换为直接建模

标签 hibernate model-view-controller struts2

当我在createQuery()之后使用Hibernate(HQL)的list()时,我想直接将List<Object[]>转换为我的List<POJO class>。我在这里描述我的实际情况。我有3个普通的Java对象,说Person,Operation和Project,一个表说Transaction,带有对Person,Operation和Project的外部引用。

class Person {
  String name;
  // getters and setters
}

class Operation {
  String name;
  // getters and setters
}

class Project {
  String name;
  // getters and setters
}

class Transaction {
  String p_id;
  String o_id;
  String project_id;
  // refers to id of All three table above
}

现在,我想执行一个 hibernate 查询语言查询说
String query="select p.name, o.name, project.name from Person p , Operation o, Project project , Transaction t where p.id=2 and p.id=t.p_id and o.id=t.o_id and project.id=t.project_id"

我已经创建了一个Model类用于此查询的输出,例如POP_Model。
private class POP_Model {
  String person_name;
  String operation_name;
  String project_name;
}

现在,我想使用Hibernate查询:
Session session=HibernateConnection.getSessionFactory().openSession();
Query q=session.createQuery(query);
List<POP_Model> list=(List<POP_Model>)q.list();

它给出了类型转换错误,表明无法将Object []转换为POP_Model。我 checkout 了TypedQuery,但没有得到示例。但是据我所知,TypedQuery可以用于映射到POJO而不是Model。我想直接将强制类型转换为模型。

最佳答案

如果可以使用JPA API(也可以由Hibernate实现)而不是为此使用Hibernate API,则可以使用JPQL构造函数查询:

List<DTO> dtos = entityManager.createQuery("SELECT NEW com.example.DTO( p.name, o.name) FROM Entity o").getResultList();

编辑似乎Hibernate也使用其常规API实现了构造函数表达式:
List<DTO> dtos = session.createQuery("SELECT NEW com.example.DTO( p.name, o.name) FROM Entity o").list();

EDIT2 JPA是Java EE标准,可与Hibernate和EclipseLink等不同的持久性库统一使用。 oracle tutorial非常不错。

您可以像这样在非EE应用程序中检索EntityManager:
  @PersistenceUnit
  private EntityManagerFactory emf;
  ...
  EntityManager em = emf.createEntityManager();

关于hibernate - Hibernate HQL createQuery()list()类型强制转换为直接建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15339504/

相关文章:

c# - 将逻辑放入 ViewModel get'ers

java - Struts2 & Tiles : When apache. org 已关闭我的 webapp 无法启动

java - 在 Struts 中,如何将 key 中包含的值赋予 href

java - Spring Boot API返回不带标签的json

java - Hibernate 数据库名称更改给出 MySQLSyntaxErrorException : Table doesn't exist

java - 如何使用Hibernate SQL投影查询?

java - 指定单向 @OneToOne JPA 映射的所有者

c# - 从远程路径获取FileInfo

java - apache struts2中如何获取请求体和响应体? - 使用 $.ajax 发布

c# - 对 MVC Controller 感到好奇吗?