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 映射本机查询的结果集的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Spring 在使用 Hibernate 3 时推迟关闭 Hibernate 会话
使用 hibernate、hibernate 注释和 ehcache 的 Maven 依赖项是啥?