2012-03-02 8 views
0

このクエリでは問題がありますが、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列が二回マップされているため

答えて

1

あなたのマッピングは、間違っています。

いずれthis example from the Hibernate documentationに示すように、関連付けが一方向にし、StudentRaceにstudentidフィールドを削除するか、または双方向行い、StudentRaceStudent studentフィールドが、ManyToOneとしてマッピング。

関連する問題