Основной Hibernate / JPA Mapping вопрос - PullRequest
2 голосов
/ 28 августа 2010

У меня есть таблицы, которые я хочу сопоставить друг с другом. Я хочу заполнить 2 выпадающих списка: code_r и code_l. Когда я выбираю значение из code_r, code_l должен отображать только определенные записи. В моей базе данных есть 2 таблицы:

Table code_r
===================
CODE         INT
LIBELLE      VARCHAR

А

Table code_l
===================
ID           BIGINT
CODE_R_ID    INT
LIBELLE      VARCHAR

С одним code_r может быть связано несколько code_l (на основе code_r_id (не определяется как внешний ключ в определении code_l). Конечно, code_l может быть связан только с одним code_r.

Следующий запрос SQL работает нормально:

SELECT * 
FROM code_r r
 left join `code_l` l on l.code_r_id = r.code;

Как мне реализовать это, используя аннотации JPA / Hibernate-3.5 в классах CodeR и CodeL ??

Любая помощь будет оценена. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 28 августа 2010

С помощью Hibernate (и теперь стандартизированного в JPA 2.0) вы можете использовать однонаправленную связь «один ко многим» без таблицы соединения, используя аннотацию JoinColumn:

Аннотируйте CodeR следующим образом:

@Entity
public class CodeR {
   @Id
   private Integer code;
   private String libelle;

   @OneToMany
   @JoinColumn(name="CODE_R_ID")
   Set<CodeL> codeLs = new HashSet<CodeL>():

   // getters, setters
}   

И CodeL

@Entity
public class CodeL {
   @Id
   private Integer id;
   private String libelle;

   // getters, setters, equals, hashCode
}   

И запрос JPQL:

SELECT r FROM CodeR LEFT JOIN  r.codeLs
3 голосов
/ 28 августа 2010

в классе CodeR:

@ OneToMany (mappedBy = "code_r_id")

Коллекция элементов FromL;


в классе CodeL:

@ ManyToOne

CodeR code_r_id;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...