java HQL为@OneToOne和@JoinColumn编写条件
我在应用程序中使用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 repository中尝试这样的查询时,我遇到了一个错误,即对象无法转换为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)。我也尝试过使用连接,但没有帮助
谁能给我一些建议,我怎样才能完成我的任务?非常感谢
共 (0) 个答案