В моем приложении пользователи могут генерировать запросы на вещи, поэтому у меня есть две сущности: Запрос и Пользователь, сопоставляемые с базовыми таблицами с одинаковыми именами.Существует отношение многие к одному, так что пользователь может сделать много запросов.Поэтому объект «Мой запрос» выглядит так:
@Entity
@Table(name="request")
public class Request implements Serializable {
private int id;
private User requester;
@Id
@Column(name="ID", unique=true, nullable=false)
public int getId() {
return this.id;
}
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="REQUESTER", nullable=false)
public User getRequester() {
return this.requester;
}
}
Мне нужно получить список всех пользователей, которые сделали хотя бы один запрос.
Я пробовал следующее:
public List<User> retrieveAllRequesters() {
return hbSession().createQuery("select requester from Request r left join r.requester as requester").list();
}
но это возвращает сущность для каждого запроса
Я попытался добавить отдельное ключевое слово , например:
select distinct requester from Request r left join r.requester as requester
, но это привело к синтаксису HQLошибка
Я пробовал несколько других вещей, меняя left объединение на внутреннее и внешнее , но безуспешно.
Буду признателен за предложение HQL сделать то, что мне нужно.Спасибо.
Богемиан предположил, что это может быть проблемой диалекта, поэтому я включил hibernate.show_sql, и он показывает следующее:
Hibernate:
select
distinct user1_.ID as ID10_,
user1_.EMAIL_ADDRESS as EMAIL2_10_,
user1_.EXTERNAL_ID as EXTERNAL3_10_,
user1_.IS_ADMINISTRATOR as IS4_10_,
user1_.IS_SUPERVISOR as IS5_10_,
user1_.IS_TECHNICIAN as IS6_10_,
user1_.LAST_CHECKED_IN_AT as LAST7_10_,
user1_.LAST_LOGGED_IN_AT as LAST8_10_,
user1_.LAST_UPDATED_AT as LAST9_10_,
user1_.NAME as NAME10_,
user1_.UI_PREFERENCES as UI11_10_
from
request request0_
inner join
[user] user1_
on request0_.REQUESTER=user1_.ID
2255 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 421, SQLState: S0001
2255 [main] ERROR org.hibernate.util.JDBCExceptionReporter - The text data type cannot be selected as DISTINCT because it is not comparable.
База данных MS SQL Server.