2012-03-02 1 views
0

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

@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 - Я могу вручную выполнить запрос и посмотреть данные. Тем не менее, объекты Student всегда имеют «расы» как null. Как я уже сказал, этот запрос отлично работает в Oracle. Есть какие-то вещи настройки HSQLDB, которые я пропускаю?

Редактировать: Нравится? В Студента:

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

В StudentRace:

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

Еще не повезло. Элемент «расы» по-прежнему равен нулю.

ответ

1

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

Либо сделать ассоциацию однонаправленным и удалить studentid поле в StudentRace, или сделать его двунаправленным, и имеют Student student поле в StudentRace, отображается как ManyToOne, как показано на this example from the Hibernate documentation.

Смежные вопросы