JPQL заказ одним из ElementCollection - PullRequest
1 голос
/ 10 марта 2012

У меня есть следующие объекты:

Article
| 
+- @Id long id
|
+- @ElementCollection Map<Language, Translation> translations

Translation
|
+- @Column String name

Чего я хотел бы добиться, так это получить список статей, упорядоченных по названию на данном языке.

Что-то вроде:

SELECT a FROM Article a 
JOIN a.translations t WHERE t.language = ? 
ORDER BY t.name

Проблема в том, что при использовании t.language выдает исключение "не удалось разрешить свойство", даже если в таблице базы данных переводов существует столбец language.

Как мне добиться этого поведения?

1 Ответ

2 голосов
/ 10 марта 2012

Я думаю, что это не поддерживается Hibernate. Я бы просто сделал Перевод сущностью, а не встроенной, и включил бы языковое поле в сущность перевода.

Отображение будет

 @OneToMany
 @JoinColumn(name = "article_id")
 @MapKey(name = "language")
 private Map<Language, Translation> translations;

Ассоциация также может быть двунаправленной, и ваш запрос может быть гораздо более логичным и менее опасным, поскольку он может возвращать переводы, а не статьи:

select t from Translation t 
inner join fetch t.article 
where t.language = :language 
order by t.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...