2014-09-05 54 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集合在您访问它之前不会被初始化。