选择"在 HQL 中查询"



我的数据库中有一个与Vendor表对应的Vendor类,我想从该表中检索数据。当我使用它时:

Query q = s.createQuery("from Vendor ");
java.util.Iterator itr = q.iterate();
while (itr.hasNext()) {
Vendor v = (Vendor) itr.next();
System.out.println(v.getVendor Id() + " " + v.getVendorName() + " " + v.getVendorRating());

它工作正常。但是当我想使用select查询做同样的事情时:

Query q = s.createQuery("select v.vendorId, v.vendorName, v.venderRating from Vendor v");
Iterator itr = q.iterate();
while (itr.hasNext()) {
Vendor v = (Vendor) itr.next();
System.out.println(v.getVendorId() + " " + v.getVendorName() + " " + v.getVendorRating());
}

引发错误:

线程"main"中的异常 java.lang.ClassCastException: [Ljava.lang.Object; 不能转换为 com.apple.hibernate.vendor.vendor

我错过了什么?

"select v.vendorId, v.vendorName, v.venderRating from Vendor v"

不会返回一个供应商对象,而是一个Object[],数组中的每个项目都是一列。

在您的情况下,它应该是这样的:

Query q = s.createQuery("select v.vendorId, v.vendorName, v.venderRating from Vendor v");
Iterator itr = q.iterate();
while (itr.hasNext()) {
Object[] v = (Object[]) itr.next();
System.out.println(v[0] + " " + v[1] + " " + v[2]);
}

代码没有经过测试,所以它可能有些错误,但逻辑就在那里。

最新更新