我对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")
也不起作用。
答案 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
集合在您访问之前不会被初始化。