OK、JPA/Hibernateに関する私の理解に欠けていると思います。私は2つのテーブルを持っています:生徒を表す生徒と、生徒のクラスへの割り当てを表すCC。 CCテーブルには学生を参照するSTUDENTID列があります。私は、関連する生徒記録を持つCCレコードを返す簡単なクエリを実行しようとしています。私のCCクラスは、この(削除されたものがたくさん)のようになります。私は「ID」STUDENTSテーブルの主キーではないのでreferencedColumnNameとを指定する必要が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;
...
}
。私は次のようにクエリを実行しようとしています:
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=?
上記のように、問題は、STUDENTID列がヌルでなくても、CCの「学生」サブオブジェクトが常にヌルであることです。私は何か間違っていると確信していますが、何ですか?
あなたは生徒のリストを繰り返し作成してCCを取得するのに適していませんか? – elias
私は、与えられた学生がいるすべてのクラスを探していたら、はい。しかし、私は反対の情報を探しています:私は特定のクラスのすべてのCCレコードが欲しい、私は同時に学生の情報が必要です。 – fool4jesus
なぜあなたはstudentid列私立学生学生が必要です; カラムは、dbを学生に参照する外部キーとしてすでに格納されています。 – ayengin