Много ко многим и HQL - PullRequest
       7

Много ко многим и HQL

1 голос
/ 15 августа 2011

Я получил класс:

@Entity
@Table(name="restaurants")
public class Restaurant {
    @Id
    @GeneratedValue
    private int id;
    private String name;
    private String street;
    (...)
    @ManyToMany
    @JoinTable(name="user_restaurant_owner",
            joinColumns={@JoinColumn(name="restaurant_id")},
            inverseJoinColumns={@JoinColumn(name="username")})
    private List<User> owner;

Как получить Ресторан, если я знаю имя пользователя (владельца)?

Запрос q = session.createQuery ("из Restaurant as r, где r.owner =: username"). SetString ("username", username);

не работает

Ответы [ 3 ]

8 голосов
/ 16 августа 2011

Вам необходимо присоединиться к коллекции на HQL, если вы выбираете свойства элемента в коллекции.

from Restaurant r join r.owner o where o.username = :username
1 голос
/ 16 августа 2011

from Restaurant as r должно быть from Restaurant r нет as (не уверен, если это необязательно).Кроме того, вы делаете r.owner = ... это должно быть r.owner.username = :username

0 голосов
/ 16 августа 2011

r.owner ссылается на ПЕРВИЧНЫЙ КЛЮЧ таблицы владельцев.

то, что вам нужно, это подвыбор (здесь для простоты сделано в SQL - я не слишком уверен в HQL):

select {r.*} from Restaurant as r where r.owner = ( select id from Owners as own where own = :username ).setString("username", username)

таким образом, вы сопоставляете внешний ключ с полем, на которое оно ссылается, а не с полем имени.

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