我在我的应用程序中使用Hibernate和Spring 4。 我创建了下一个数据库实体结构:
public static class Entity1 {
@Id
private String guid;
@OneToOne
@JoinColumn(name = "name", referencedColumnName = "guid")
private Localized name;
private String another_data;
}
public static class Localized {
@Id
private String guid;
private int locale;
private String data;
}
表 本地化 包含以下数据:
+-----------------+--------+---------------------------------------+
| guid | locale | data |
+-----------------+--------+---------------------------------------+
| random_string_1 | 1 | localized string (in English) |
| random_string_1 | 2 | localized string (in German) |
| random_string_2 | 1 | another localized string (in English) |
| random_string_2 | 2 | another localized string (in German) |
+-----------------+--------+---------------------------------------+
在我的数据库(MySQL)表中, 本地化 已合并主键(guid + locale)。
在我的应用程序中,我希望使用我提供的区域设置来获取 Entity1 对象。
我可以在SQL中描述它:
SELECT e.guid, l.data, e.another_data
FROM Entity1 AS e, Localized AS l
WHERE l.locale = :myLocale AND l.guid = e.name;
但是当我在Spring 4存储库中尝试这样的查询时,我收到错误,该对象无法转换为Entity1(我理解为什么)。
我尝试了另外一个HQL,如下:
@Query("SELECT e FROM Entity1 AS e WHERE e.name.locale = :locale")
Page<Entity1> findAllByLocale(Pageable pageable, @Param(Entity1.FIELD_LOCALE) int locale);
它给我正确的结果,除了名称,因为它仍然是不正确的语言(ID为1)。我也试过使用JOIN但它没有帮助。
有人可以告诉我如何完成任务吗?非常感谢。