欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

createSQLQuery获取对象列表

程序员文章站 2024-02-01 10:01:28
...

      在进行对象关系映射时,无论是使用Hibernate Session还是JPA EntityManager,都会有许多的优势,同时也伴随着不少的缺陷,这也就说明了企业架构师为何在这两者之间难以抉择了。JPA EntityManager是Java Persistence API标准的一部分。然而,Hibernate Session提供的许多功能都在JPA specification之上,超越了JPA specification,标准查询功能是一个引人注目的,但JPA 1.0却没有的遗留功能,而Hibernate Envers成了使用Hibernate 4.0 Session对象的强大理由,超越了它的JPA们。

  据Emmanuel Bernard说,组织采用Hibernate来执行ORM工作是喜欢的一种选择是使用JPA EntityManager。他是Jboss的数据架构师,也是Hibernate团队一员。因此,如果IT开发人员需要得到基础 Hibernate Session来访问它的附加功能的话,他们应该怎么做?幸运地,JPA规范使提访问基本Hibernate Session成为可能,即使你的应用正在使用JSR-317标准。

  JPA 1.0访问Hibernate Session

  为也从JPA 1.0 EntityManager中得到Hibernate Session,那么下面的代码是必不可少的:

 

org.hibernate.Session hibernateSession = (Session)entityManager.getDelegate();

 

  不幸地,这个语法不是完全可移植的,虽然此代码可在Jboss应用服务器上运行良好,但运行在其它平台时,将会出现不可预测的后果。

  JPA 2.0访问Hibernate Session

  很幸运,JPA 2.0提供了更好的、更可移植的,更加跨平台的方法,来获取Hibernate Session。代码如下:

 

Session session = entityManager.unwrap(org.hibernate.Session.class);

  就是它了!当与JPA EntityManager一起合作是,获取基本的Hibernate实现类是如此地简单。因此,让此代码成为你的HibernateUtil类的一部分,使永久存储成为可能,与你的实体beans一起工作,成为多态的Hibernate Session,从而允许你利用更多的简洁功能,超越JPA规范,凌驾于JPA之上。

    hibernate 中createQuery与createSQLQuery两者区别是:

前者用的hql语句进行查询,后者可以用sql语句查询

前者以hibernate生成的Bean为对象装入list返回

后者则是以对象数组进行存储

所以使用createSQLQuery有时候也想以hibernate生成的Bean为对象装入list返回,就不是很方便

突然发现createSQLQuery有这样一个方法可以直接转换对象

Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);

 

XXXXXXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean。