有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案