JPQL按ElementCollection之一排序

时间:2012-03-10 09:41:40

标签: java hibernate jpa jpql

我有以下实体:

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 throws“无法解析属性”异常时,即使翻译数据库表中存在language列。

我该如何实现这种行为?

1 个答案:

答案 0 :(得分:2)

我认为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