Spring Hibernate:涉及映射实体的SQLQuery

时间:2014-02-09 02:11:31

标签: java sql spring hibernate mapping

我有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对象。我尝试了herehere的几种不同方法。

有没有办法找出对象在每个Object []中的排列方式?

2 个答案:

答案 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现在可以正确填充所有映射的实体。