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

How to use @OneToOne with a @Where in Hibernate?

我现在有2个实体,一个是POST,另一个是POST_DETAILPOST_DETAIL 存储了 POST.

的不同翻译

(简化)POST 模式:

- ID NUMBER

(简化)POST_DETAIL 架构:

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

我想要 ONLY 其中之一(说英语)POST_DETAILPOST 中使用 Hibernate 注释

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))
class Post {
    @OneToOne
    @JoinColumn(name = "ID", referencedColumnName = "REF_ID")
    private PostDetail postDetailEn;
}

你应该为此使用@OneToOne 注释。

业主方

 class Post {
       @OneToOne(cascade = CascadeType.ALL)
       @JoinColumn(name = "postdetail_id")
       private PostDetail postDetail;
    }

我发现这个 post 关于 @JoinFormula 我也有类似的情况。

因为我只需要PostDetail里面的Post,所以我没有在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;
}