JPA / Hibernate / HSQLDB запрашивает, но не назначает подобъект - PullRequest
0 голосов
/ 02 марта 2012

У меня проблемы с этим запросом, но ТОЛЬКО под HSQLDB. Мы используем Oracle для рабочей базы данных и HSQL для автоматизированных интеграционных тестов. Вот мой главный объект:

@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 выглядит так:

@Entity
@Table(name="STUDENTRACE")
@org.hibernate.annotations.Proxy(lazy=false)
public class StudentRace implements Serializable {
...
    @Column(name="STUDENTID")
    private Integer studentid;
...
}

И мой запрос JPA выглядит так:

entityManager.createQuery("select distinct s from Student s left join fetch s.races "+
  "where s.schoolNumber = :schoolNumber");

Я знаю, что у меня есть правильные данные в базе данных HSQLDB - я могу вручную сделать запрос и просмотреть данные. Все же объекты Студента всегда имеют "гонки" как ноль. Как я уже сказал, этот запрос прекрасно работает в Oracle. Мне не хватает какой-то настройки HSQLDB?

Редактировать: Как это? В ученике:

@OneToMany(fetch=FetchType.LAZY, mappedBy="id")
private Set<StudentRace> races;

В StudentRace:

@ManyToOne
@JoinColumn(name="STUDENTID")
private Student student;

Все еще не повезло. Элемент "гонки" по-прежнему нулевой.

1 Ответ

1 голос
/ 02 марта 2012

Ваше отображение неверно, поскольку столбец STUDENTRACE.STUDENTID отображается дважды: один раз как JoinColumn в Student и один раз как столбец в StudentRace.

. Или сделайте ассоциацию однонаправленной и удалитеполе studentid в StudentRace, или сделать его двунаправленным, и иметь поле Student student в StudentRace, отображаемое как ManyToOne, как показано в в этом примере из документации Hibernate .

...