我有Hibernate生成的包含其他类的类 -
public class BookLoans implements java.io.Serializable {
private BookLoansId id;
private Borrower borrower;
private LibraryBranch libraryBranch;
private Book book;
private Date dateOut;
private Date dueDate;
}
其中BookLoansId是 -
public class BookLoansId implements java.io.Serializable {
private int bookId;
private int branchId;
private int cardNo;
}
分别是表Book,LibraryBranch和Borrower中的主键。当我运行此查询时 -
sessionFactory.getCurrentSession().createSQLQuery(
"select * from library.tbl_book_loans l where cardNo = 4");
Hibernate返回Object []元素列表。如果我尝试遍历此列表,我会得到null对象。我尝试了here和here的几种不同方法。
有没有办法找出对象在每个Object []中的排列方式?
答案 0 :(得分:1)
要将查询结果直接映射到实体objct,请使用addEntity(BookLoans.class);
sessionFactory.getCurrentSession().createSQLQuery(
"select * from library.tbl_book_loans l where cardNo = 4")
.addEntity(BookLoans.class);
参见文档(16.1.2。实体查询): http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html
然而,您从尝试中获得的空值的结果很奇怪。 Hibernate应该为您提供对象列表,其中每个Object数组表示结果集的一行中的字段。检查查询是否真的返回了一些内容。
答案 1 :(得分:0)
我通过使用HQL解决了这个问题:
from library.tbl_book_loans where borrower.cardNo = 4
Hibernate现在可以正确填充所有映射的实体。