我有示例代码来检查双向关系是如何工作的。
@Getter
@Setter
@NoArgsConstructor
@ToString
@Entity
public class A {
@Id
@GeneratedValue
private long aId;
String name;
String address;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "b_id_FK")
B b;
}
@Getter
@Setter
@NoArgsConstructor
@ToString
@Entity
public class B {
@Id
@GeneratedValue
@Column(name = "b_id_PK")
private long bId;
private String name;
private String address;
@JoinColumn(name = "a_id", referencedColumnName = "aId")
@OneToOne(mappedBy = "b", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
A a;
}
public void insertAB(){
B b = new B();
b.setName("B-Name");
b.setAddress("B-Address");
A a = new A();
a.setName("A-Name");
a.setAddress("A-Address");
a.setB(b);
b.setA(a);
aRepository.save(a);
}
我可以看到这种表h2表:-
A:-
B:-
对于B表,我期待一个列a_id
,正如我在代码中提到的。
所以我在我的控制器中,如果我试图检索B,如下所示:-
@GetMapping(value = "/getb/{id}")
public B getB(@PathVariable long id){
var b = bRepository.findById(id).get();
return b;
}
{
"name": "B-Name",
"address": "B-Address",
"a": {
"name": "A-Name",
"address": "A-Address",
"b": {
"name": "B-Name",
"address": "B-Address",
"a": {
"name": "A-Name",
"address": "A-Address",
"b": {
"name": "B-Name",
"address": "B-Address",
"a": {
"name": "A-Name",
"address": "A-Address",
...........
它就像一条链条,一条链条,一条链条。我正在学习hibernate和表的关系。显然我误解了什么。我的目的是双向的,当我加载A时,我可以访问相关的B。同样,当我加载B时,我可以访问相关的A。我如何实现这个目标?
A
是关联的拥有方(由mappedBy
属性指定),因此关联信息作为A
表的一部分保留。实体B
-作为非拥有方-在其表中不包含任何关联信息(并且不需要@JoinColumn
注释)。
对于(JSON-)序列化,您可能希望注释一个实体关联属性,例如使用@JsonBackReference
,以便在序列化时省略它并避免无限递归(请参阅https://stackoverflow.com/a/31319631).
问题内容: 我正在尝试在Hibernate中将一对一关系映射为“零或一个”关系。我想我可能已经找到了使用多对一方法。 A类的映射指定: B类的映射指定: 我想在数据库中找不到B的匹配行时b为null。所以我可以做到这一点(在A类中): 但是,看来b永远不会为空。 我该怎么办? 问题答案: 答案是在A中的多对一语句中添加not-found =“ ignore”: 我尝试按照Rob H的建议,简单地向
一对一关联模型 满足条件:一个人只能对应一个身份证,一个身份证只能对应一个人 示例: student 学生表 card 身份证表 >[danger] 一对一可以在任意一个表添加外键 > 注意!!! 一对一外键需要添加 unique 唯一约束 反向关联 'use strict'; const moment = require('moment'); module.exports = app =>
null 但是在Eclipse中测试它之后,它渴望得到所有的东西。 是否取决于我使用的是JPA还是Hibernate?
我有两个不同的表,Person表和Employee表。我需要这两者之间的一对一映射。Employee表的emp_id引用Person表的person_id。在使用注释编写映射方面我需要一些帮助
我需要帮助在java类中为这些关系表创建映射Hibernate注释(一对一): 有人能帮我吗?谢谢你。
问题内容: hibernate映射中的默认访存类型是什么? 探索之后我知道的是: 渴望 一对一。 对于一对多来说,这是 懒惰的 。 但是在Eclipse中对其进行测试后,它对所有人都非常渴望。 是否取决于我使用的是JPA还是Hibernate? 问题答案: 这取决于您使用的是JPA还是Hibernate。 根据JPA 2.0规范,默认值为: hibernate的时候,一切都是懒惰的 更新: 最新版