HQL为@OneToOne和@JoinColumn列编写条件

时间:2016-01-13 23:39:18

标签: java sql spring hibernate hql

我在我的应用程序中使用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但它没有帮助。

有人可以告诉我如何完成任务吗?非常感谢。

0 个答案:

没有答案