2012-02-10 79 views
0

我想创建一个实体,它的字段不是特定于表而是查询。例如:创建一个不与表关联的Hibernate实体

@Entity 
class MyEntity{ 
    @column("bookTitle ") 
    private String bookTitle; 

    @Column("rating ") 
    private Double rating; 

    @Column("sum") 
    private Integer sum; 
} 

这些领域都没有任何表的列,但我却想: SELECT o1.bookName AS BOOKTITLE,o2.rate AS评级,o3.totalNumber AS总和......

的EntityManager .createQuery(我的上面的查询,MyEntity.class)应该返回一个类型为MyEntity的类如预期

不幸的是,Hibernate抱怨“找不到列”。在EclipseLink或Toplink中,它工作正常。此外,在我看来,一个实体不应该与某个特定的表相关联,而应该拥有一组随机收集的列。

任何想法?

回答

0

不能映射选择使用Hibernate/JPA的@Entity,但你可以这样做:

public class MyEntity{ 

    private String bookTitle; 
    private Double rating; 
    private Integer sum; 

    public MyEntity(String bookTitle, Double rating, Integer sum) { 
     this.bookTitle = bookTitle; 
     this.sum = rating; 
     this.sum = sum; 
    } 
} 

然后您使用以下HQL:

select new package.MyEntity(o1.bookName, o2.rate, o3.totalNumber) from something where 

另一种解决方案是创建一个视图并将@Entity映射到视图。

+0

谢谢,我意识到这个解决方案,但它不是优雅 – 2012-02-14 10:38:06

+0

顺便说一句,有可能在不驻留在任何表的hibernate实体内声明新列,只要您的查询“选择”它们。换句话说,只有映射实体字段时,hibernate才会投诉,而您的选择不包含此字段 – 2012-02-14 10:58:01

相关问题