gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:14:02 25 4
gpt4 key购买 nike

我现在有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com