Hibernate:使用@SqlResultSetMapping 映射本机查询的结果集

Posted

技术标签:

【中文标题】Hibernate:使用@SqlResultSetMapping 映射本机查询的结果集【英文标题】:Hibernate: Mapping result set of native query with @SqlResultSetMapping 【发布时间】:2010-05-10 14:16:01 【问题描述】:

我正在尝试以下方法:

MyResult.java:

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityResult;
import javax.persistence.SqlResultSetMapping;


@Entity
@SqlResultSetMapping(name = "myResults", entities = @EntityResult(entityClass = MyResult.class))
public class MyResult implements Serializable


    /**
     * 
     */
    private static final long   serialVersionUID    = -1934790337160508576L;

    @Column(name="X")
    private int x;

    @Column(name="Y")
    private double y;


    // 
    // Getters and Setters...
    //

在其他java类中:

Query q = ((org.hibernate.ejb.QueryImpl) this.entityManager.createNativeQuery (this.sql,
                        "myResults")).getHibernateQuery ( );
List<MyResult> result = q.list ( );

当我运行这段代码时,我得到:

[PersistenceUnit: MyHibernatePgSql] 无法配置 EntityManagerFactory

当我从 MyResult.java 中删除:“@Entity”部分时,我得到:

org.hibernate.MappingException:未知的 SqlResultSetMapping [myResults]

我知道我做错了什么,但我不知道是什么?我也找不到关于这个的好的文档。

提前致谢

编辑:查询如下所示:SELECT X, AGG_FUNC(F) AS Y FROM...

【问题讨论】:

【参考方案1】:

一些评论/问题:

你真的只得到[PersistenceUnit: MyHibernatePgSql] Unable to configure EntityManagerFactory而没有任何堆栈跟踪或日志吗?

您的实体是否在某处有@Id 注释(实体必需)?

你为什么打电话给getHibernateQuery?这似乎是不必要的,o.h.e.QueryImpl 的演员表也是如此。

您为什么不使用 JPQL(在这种情况下,您可以使用 SELECT NEW 假设您的实体确实具有正确的构造函数)?

【讨论】:

感谢您的建议。问题是缺少 @Id 注释。菜鸟错误:)

以上是关于Hibernate:使用@SqlResultSetMapping 映射本机查询的结果集的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL ResultSet 视为 Scala 流

Hibernate的初次使用

为啥 Spring 在使用 Hibernate 3 时推迟关闭 Hibernate 会话

使用 hibernate、hibernate 注释和 ehcache 的 Maven 依赖项是啥?

如何使用 hibernate.properties 文件而不是 hibernate.cfg.xml

ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存