Простой HQL именованный запрос, который использует внутреннее соединение - PullRequest
1 голос
/ 27 октября 2011

Я хочу сделать что-то подобное в моем объекте домена / сущности:

@Entity
@NamedQueries({
@NamedQuery(name="favouriteCats", query="from Cat c inner join on UserCat uc where uc.isFavourtie = true and uc.user = :user")
})
public final class Cat extends BaseTable

Чтобы на моем уровне обслуживания я мог сделать это:

Query query = session.getNamedQuery("favouriteCats")
query.setParameter(0, MyUser);
return query.list();

Однако мой синтаксисв HQL неверно - и после десяти минут просмотра официальных документов я решил сдаться и спросить здесь ...?Моя таблица usercat соединена так:

@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name="cat_fk", insertable=false, updatable=false)
private cat

sql, это нормально работает в командной строке моей базы данных:

select c.* 
from cat as c inner join usercat as uc on c.id = uc.cat_fk 
and uc.isFavourite = 1 //bit field
and uc.user_fk = 74 //just user id

Это только у меняили документация hibernate довольно болезненна, и вы часто задаетесь вопросом, не будет ли быстрее просто написать обычные подготовленные jdbc операторы для заполнения ваших pojos / domain объектов / dto's ...?

Ответы [ 2 ]

4 голосов
/ 27 октября 2011

Я думаю, это может сработать для вас, но я предполагаю, что ваш класс Usercat здесь:

select c from Usercat as uc inner join uc.cat as c where uc.isFavourtie = true and uc.user = :user
1 голос
/ 27 октября 2011

Проблема, правильный запрос будет:

from Cat c inner join on Usercat uc where uc.isfavourtie = true and uc.user = :user

Примечание: C в Cat - это заглавная, U в Usercat - заглавная, где c в Usercat мала, а f в isfavourite мала.

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