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

(简体)POST模式:

- ID NUMBER

(简体)POST_DETAIL模式:
 - ID NUMBER
 - REF_ID NUMBER  # FK to POST.ID
 - LANG VARCHAR
 - TITLE VARCHAR

我想在带有Hibernate批注的POST_DETAIL中包含(说英语)POST中的唯一一种
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;
}

但是休眠记录的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的帖子,而我也遇到类似的情况。

由于我只需要在PostDetail内添加一个Post,因此我没有在Post中添加PostDetail字段,因此我的解决方案是

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;
}

09-27 20:05