选择后hibernate错误的返回类型

时间:2014-09-05 09:54:28

标签: hibernate types

我对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的List,但后来我想要这个createQuery("select id, name, date from Account"),而我没有一个Account对象回到transactions为空,我得到一个Object,我不想被转换为帐户。知道如何获得Account对象吗? typedQuery createQuery("from Account",Account.class")也不起作用。

2 个答案:

答案 0 :(得分:0)

编写简单查询session.createQuery(“来自帐户”).list()

只需简单地在Account类中添加三个字段(id,name,date)。 Hibernate将填充这些值。 只需通过注释正确映射类名和列名。

答案 1 :(得分:0)

在查询中枚举字段会为您提供一个Object数组列表。即当您致电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集合在您访问之前不会被初始化。