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

时间:2010-05-10 14:16:02

标签: java hibernate orm

我正在尝试以下方法:

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 个答案:

答案 0 :(得分:3)

一些评论/问题:

  • 您是否真的只获得[PersistenceUnit: MyHibernatePgSql] Unable to configure EntityManagerFactory没有任何堆栈跟踪或日志?

  • 您的实体在某个地方是否有@Id注释(实体需要)?

  • 为什么打电话给getHibernateQuery?这似乎是不必要的,而且投射到o.h.e.QueryImpl也是如此。

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