我有以下实体:
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
列。
我该如何实现这种行为?
答案 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