このクエリでは問題がありますが、HSQLDBの下でのみ問題があります。自動化された統合テストのために、本番データベースとHSQLにOracleを使用します。JPA/Hibernate/HSQLDBサブオブジェクトを照会していますが、サブオブジェクトを割り当てていません
@Entity
@Table(name="STUDENTRACE")
@org.hibernate.annotations.Proxy(lazy=false)
public class StudentRace implements Serializable {
...
@Column(name="STUDENTID")
private Integer studentid;
...
}
そして、私のJPAのクエリは、このようなものです::
@Entity
@Table(name="STUDENTS")
@org.hibernate.annotations.Proxy(lazy=false)
public class Student implements Serializable {
...
@OneToMany(fetch=FetchType.LAZY)
@JoinColumn(name="STUDENTID",referencedColumnName="ID")
private Set<StudentRace> races;
...
}
StudentRaceは次のようになります。ここに私の主な目的だ
entityManager.createQuery("select distinct s from Student s left join fetch s.races "+
"where s.schoolNumber = :schoolNumber");
私はHSQLDBデータベースに正しいデータを持って知っています - 私は手動でクエリを実行し、データを見ることができます。しかし、スチューデントオブジェクトは常に「レース」をヌルとして持っています。私が言ったように、このクエリはOracleで正常に動作します。 HSQLDBの設定に何か不足していますか?
編集:このようにしますか?学生には:StudentRaceで
@OneToMany(fetch=FetchType.LAZY, mappedBy="id")
private Set<StudentRace> races;
:
@ManyToOne
@JoinColumn(name="STUDENTID")
private Student student;
まだ運。 "race"要素はまだnullです。 StudentRace
の列として一度Student
にJoinColumnとして一度、および:STUDENTRACE.STUDENTID
列が二回マップされているため