`
雨打蕉叶
  • 浏览: 236399 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

createSQLQuery获取对象列表

    博客分类:
  • J2EE
阅读更多

      在进行对象关系映射时,无论是使用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。

0
0
分享到:
评论

相关推荐

    Query对象setResultTransFormer()

    在上面的代码中,我们使用 setResultTransformer() 方法将查询结果转换为 Tree 对象,然后使用 list() 方法获取查询结果,最后遍历结果集,使用 Tree 对象来获取每个字段的值。 最后,让我们总结一下 ...

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    例如,它可能有一个`getMailsByCriteria(String criteria)`方法,该方法根据某些条件(criteria)从邮件表中选择部分字段,并将它们映射为Mail对象列表。 总结起来,Hibernate3通过`createSQLQuery()`方法提供了对...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  ...

    java-Hibernate 检索

    例如,使用 session.get() 或 session.load() 方法可以根据 OID 获取对象。 session.get(Customer.class, 1); 三、HQL 检索 HQL 是 Hibernate 最常用的检索方式,它支持所有 SQL 支持的检索方式。HQL 是一种面向...

    ceateQuery ceateSQLQuery

    默认情况下,`createSQLQuery`的结果不会自动映射到任何Java Bean对象,而是以对象数组的形式返回。但在上述的解决思路二中,通过调用`addEntity(DocCatalogInfo.class)`方法,我们可以告诉Hibernate将查询结果映射...

    hibernate执行原生sql语句

    在上面的代码中,我们使用 `Session.createSQLQuery()` 方法创建了一个 `SQLQuery` 对象,然后使用 `addEntity()` 方法指定了查询结果的实体类型,最后使用 `list()` 方法执行查询并获取结果。 使用 ...

    实现自己的Hibernate框架之Session 方法实现

    4. **加载(get()和load())**:这两者都是用于从数据库中获取对象。get()方法直接返回对象,而load()则返回一个代理对象,只有在需要时才从数据库加载数据,以实现懒加载。 5. **查询(createQuery()、...

    Hibernate中Sql语句

    这里的`addScalar`方法指定了结果集中两个字段的名称和类型,而`setResultTransformer`则指定了结果转换方式,即将查询结果映射为`SumPlace`对象列表。 ##### 3. 执行查询并获取结果 ```java return (List) query1....

    Hibernate SQLQuery执行原生SQL.docx

    2. 对象列表:使用list()方法,当查询预期返回多行时使用。 ```java List<Note> list = query.list(); ``` 四、自定义结果转换器 默认情况下,SQLQuery的查询结果会映射为Object数组或List[]>。然而,有时我们...

    hibernate API

    `HibernateTemplate`是Spring框架对Hibernate的一种封装,提供了一种更简单的API来执行常见的Hibernate操作,比如获取对象、执行HQL查询等。 1. 使用`HibernateTemplate`获取ID为1的对象: ```java SellerAppInfo...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  ...

    hibernate试验

    最后,执行查询并获取结果列表。 3. **常用的限定方法、链接限定** - Hibernate的查询中,可以使用各种限定条件来过滤数据,如`setParameter()`用于设置参数,`addScalar()`用于指定返回单一列值,`setFirstResult...

    Native-SQL查询 (1).ppt

    Hibernate提供`Session`接口的`createSQLQuery()`方法来创建一个`SQLQuery`对象,用于执行原生的SQL查询。例如,以下代码展示了如何通过Native SQL获取`guestbook`表的所有记录,并打印结果: ```java ...

    Hibernate中的DAO模式

    然后在Hibernate的DAO类中,定义一个方法,如`getUsersByPage(int startIndex, int pageSize)`,在这个方法内部,使用`createSQLQuery()`调用存储过程,并将结果转换为Java对象列表。 ```java public List<User> ...

    myhibernate.zip

    2. 读取(Read):通过Session的get()或load()方法获取对象,或使用Query或Criteria API执行查询操作。 3. 更新(Update):调用Session的update()方法更新对象状态,然后提交事务。 4. 删除(Delete):使用Session...

    我用这个方法来执行查询操作

    - **解析查询结果**:使用`list()`方法获取查询结果列表。这里假设返回的数据类型为`Object[]`,然后逐个解析每一项数据,并封装成`TrainingRecord`对象。 ### 知识点四:Hibernate会话工厂的使用 在提供的讨论中...

Global site tag (gtag.js) - Google Analytics