java - 如何在 Hibernate 中使用 @OneToOne 和 @Where?

标签 java hibernate one-to-one

我现在有 2 个实体,一个是 POST,另一个是 POST_DETAILPOST_DETAIL 存储了 POST 的不同翻译。

(简化)POST 模式:

- ID NUMBER

(简化)POST_DETAIL 模式:

 - ID NUMBER
 - REF_ID NUMBER  # FK to POST.ID
 - LANG VARCHAR
 - TITLE VARCHAR

我想在 POST 中使用 Hibernate 注释ONLY 之一(说英语)POST_DETAIL

class Post {
    ...
    // annotations
    private PostDetail postDetailEn;
}

感谢任何帮助

编辑: 我希望做类似的事情

class Post {
    ...
    @OneToOne(mappedBy = "post")
    @JoinColumn(name = "ID", referencedColumnName = "REF_ID", 
                insertable = false, updatable = false)
    @Where(clause = "POST_DETAIL.LANG = 'EN'")           // not working
    @WhereJoinTable(clause = "POST_DETAIL.LANG = 'EN'")  // not working
    private PostDetail postDetailEn;
}

class PostDetail {
    ...

    @OneToOne
    @JoinColumn(name = "REF_ID", insertable = false, updatable = false)
    @Where(clause = "LANG = 'EN'")           // not working
    @WhereJoinTable(clause = "LANG = 'EN'")  // not working
    private Post post;

    @Column(name = "REF_ID")
    private Long refId;        

    @Column(name = "LANG")
    private String lang;
}

但是hibernate记录的sql没有显示where子句

编辑:例如: 数据库记录

+-----------+  +-----------------+  +-----------------+
| Post (#1) |  | PostDetail (#1) |  | PostDetail (#2) |
+-----------+  |    refId: 1     |  |    refId: 1     |
               |    lang : EN    |  |    lang : EN    |
               +-----------------+  +-----------------+

我想得到

Post(id=1, 
     postDetail=PostDetail(id=1, 
                           refId=1, 
                           lang=EN))

最佳答案

我找到了这篇关于 @JoinFormula 的帖子我也有类似的情况。

因为我在Post里面只需要一个PostDetail,所以我没有在PostDetail里面添加Post字段,我的工作解决方案是

class Post {
    ...
    @ManyToOne(fetchType = FetchType.LAZY)
    @JoinFormula("(SELECT D.ID FROM POST_DETAIL D WHERE D.REF_ID = ID AND D.LANG = 'EN')")
    private PostDetail postDetailEn;
}

关于java - 如何在 Hibernate 中使用 @OneToOne 和 @Where?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51059518/

相关文章:

java - 关于Java多态性应用于Calendar和GregoriaCalendar案例的一些疑问

java - 检查 HTTP 500 错误 HttpUrlConnection Java 中的缺陷

Java:具有自定义形状的 JButton:填充金属外观和感觉渐变

java - 在不使用主键的情况下使用 hibernate 获取数据库记录

java - 使用 hibernate-search-4.1.1.Final.jar 进行 Hibernate 全文搜索,但无法解决查询生成器等错误

sql - 在 RDBMS 中,当关系是一对一时,如果两个记录都指向彼此,或者一个指向已经足够(不需要两个都指向),这是否有帮助?

java - ubuntu java环境路径,bash :/etc/environment: permission denied?

java - 指定是否延迟加载 Spring Data

r - 如何限制模糊连接仅返回一个匹配项

php - Doctrine SoftDelete 一对一关系