2014-12-28 9 views
1

Я создал две таблицы.Определение столбца в спящем режиме

public class A { 

@Column(name = "username", unique = true, nullable = false) 
@Id 
String username; 

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinColumn(name = "username", nullable = false) 
List<B> Keys = new ArrayList<B>(); 

} 

public class B { 

@Column(name = "key", unique = true, nullable = false) 
@Id 
String id; 

} 

Теперь, когда мы видим таблицу базы данных для В, я могу видеть имя пользователя, которое отображается в таблице базы данных А.

Теперь я хочу, чтобы получить доступ к имени пользователя в B без какого-либо присоединения. Если я напишу прямой sql, я могу написать, что без присоединения.

Как это сделать в спящем режиме?

Как я могу создать сопоставление здесь?

+0

Вы забыли добавить имя пользователя в класс B, в противном случае к чему присоединяется OneToMany? –

ответ

0

, чтобы получить все результаты, связанные или не связанные с вы должны использовать Rigth внешнее соединение

Select A.username from A right outer join A.keys k group by A.username 

но в модели отсутствует @ManyToOne отношения в классе B

0

Для взаимно многие отношения существуют, вам нужно иметь отношение «много-к-одному», чтобы установить соединение. Отображение «один ко многим» - это обратная сторона отношения к отображению «много-к-одному». Это используется, когда у вас есть много-к-одному и вы хотите создать ассоциацию с обратной стороны.

В соответствии с классами, которые у вас есть, объект B является стороной-обладателем, а сущность A - обратной.

Вы можете использовать @JoinColumn и @Column для переопределения имен столбцов. Я попытался объяснить сопоставления простым способом здесь One-To-Many mapping

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