Mis*_*sha 6 model-view-controller hibernate struts2
当我在createQuery()之后使用Hibernate(HQL)的list()时,我想直接输入cast List<Object[]>给我List<POJO class>.我在这里描述我的实际情况.我有3个普通的旧Java对象说人,操作和项目和一个表说事务外部引用人,操作和项目.
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
}
Run Code Online (Sandbox Code Playgroud)
现在,我想执行一个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;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想使用Hibernate查询:
Session session=HibernateConnection.getSessionFactory().openSession();
Query q=session.createQuery(query);
List<POP_Model> list=(List<POP_Model>)q.list();
Run Code Online (Sandbox Code Playgroud)
它给出了类型转换错误,指出Object []无法转换为POP_Model.我检查了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();
Run Code Online (Sandbox Code Playgroud)
编辑看起来Hibernate也使用它的常规API实现构造函数表达式:
List<DTO> dtos = session.createQuery("SELECT NEW com.example.DTO( p.name, o.name) FROM Entity o").list();
Run Code Online (Sandbox Code Playgroud)
EDIT2 JPA是一个Java EE标准,统一使用不同的持久性库,如Hibernate和EclipseLink.在甲骨文教程是相当不错的.
您可以在非EE应用程序中检索EntityManager,如下所示:
@PersistenceUnit
private EntityManagerFactory emf;
...
EntityManager em = emf.createEntityManager();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14007 次 |
| 最近记录: |