2
好的,我認爲在理解JPA/Hibernate時有一些缺失。我有兩張表格:代表學生的學生,代表學生分班的CC。 CC表格有一個指向學生的STUDENTID列。我正在嘗試做一個簡單的查詢,在其中返回CC記錄及其關聯的學生記錄。我的CC類看起來像這樣(很多東西刪除):JPA/Hibernate查詢但沒有分配子對象
@Entity
@Table(name="cc")
public class CC {
...
@Column(name="studentid", nullable=false, updatable=false)
private Integer studentid;
@ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
@JoinColumns({ @JoinColumn(name="studentid", referencedColumnName="id",
insertable=false, updatable=false) })
private Student student;
...
}
我必須指定referencedColumnName因爲「ID」是不是學生表的主鍵。我想查詢如下:
EntityManager em = getCurrentEntityManager();
Query query = em.createQuery ("select cc from CC cc inner join fetch cc.student where cc.sectionid=:sectionid");
query.setParameter("sectionid", sectionId);
List<CC> rows = query.getResultList();
if (!CollectionUtils.isEmpty(rows)) for (CC cc: rows) {
Student student = cc.getStudent();
//// PROBLEM: student object is null here (though studentid is correct)!
}
我可以看到Hibernate是做正確的查詢,連接表一起,甚至返回學生表列在查詢投影:
select cc0_.dcid as dcid21_0_, student1_.DCID as DCID7_1_, cc0_.course_number as course2_21_0_,
... student1_.FIRST_NAME as FIRST28_7_1_, student1_.GENDER as GENDER7_1_, ...
from cc cc0_ inner join STUDENTS student1_
on cc0_.studentid=student1_.ID where cc0_.sectionid=?
如上所述,問題是CC的「學生」子對象始終爲空,即使STUDENTID列不爲null並且是正確的。我確定我做錯了什麼,但是什麼?
會不會更好地迭代學生名單並獲得他們的CC? – elias 2011-12-19 15:10:55
如果我正在尋找給定學生所在的所有課程,那麼是的。但是我正在尋找相反的信息:我需要給定班級的所有CC記錄,並且同時需要學生的信息。 – fool4jesus 2011-12-19 15:23:42
爲什麼你需要studentid專欄學生學生; 列已經存儲在數據庫中作爲引用學生的外鍵。 – ayengin 2012-01-11 20:19:43