2012-02-10 77 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

相關問題