2014-09-05 56 views
0

我對hibernate的返回類型有個小問題。我有以下類休眠選擇後錯誤的返回類型

public class Account { 
    @Id @GeneratedValue 
    private int id; 

    @Column(unique=true,nullable=false) 
    private String name; 

    @Type(type="timestamp") 
    private Date date; 

    @OneToMany(mappedBy="account",fetch=FetchType.EAGER) 
    private List<Transaction> transactions; 

    ... 
} 

在我第一次嘗試我只是做了createQuery("from Account").getResultList()和它返回一個列表這是Account型的,但後來我想這樣做createQuery("select id, name, date from Account"),我沒有與transactions得到一個帳戶對象回空了,我得到了一個Object,這些不想被轉換到賬戶。任何想法我如何獲得一個帳戶對象?類型查詢createQuery("from Account",Account.class")也不適用於我。

+3

我相信同時具有Transient和OneToMany註解將無法正常工作。瞬態意味着它不會被持久化到數據庫,而OneToMany意味着這是一個持久數據並與另一個實體有一對多的關係。 – lorraine 2014-09-05 10:03:28

回答

0

寫簡單的查詢session.createQuery( 「從帳戶」)。名單()

只是簡單的只添加三個在您的賬戶類(ID,姓名,日期)領域。 Hibernate將填充這些值。 只需通過註釋正確映射類名稱和列名即可。

+0

但如果我想在那裏的交易...東西......但只有在其餘的電話我想要3個值。 – Daniel 2014-09-05 12:23:40

0

在查詢中枚舉字段會給出對象數組的列表。即當您撥打createQuery("select id, name, date from Account").list()時,您將得到List<Object[]>類型的結果。對象數組的每個元素都包含在查詢中聲明的相應字段的值。

要獲得此類查詢的帳戶實例,您可以使用query.setResultTransformer(...)。應該實現這樣的ResultTransformer來從Object數組構建一個Account實例。但我不推薦這種方法,因爲以這種方式構造的Account實例不會在Hibernate控制下進行:對其字段的更改不會自動刷新到數據庫。

取而代之,您可以聲明transactions映射爲FetchType.LAZY並使用.createQuery("From Account").list()。在這種情況下,transactions集合在您訪問它之前不會被初始化。