Hibernate 注解专题

一对一关联查询注解@OneToOne的实例详解

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "developer_id", referencedColumnName = "developer_id", insertable = false, updatable = false)
public Developer getDeveloper() {
	return developer;
}

单向映射,在字段上使用@OneToOne注解和@JoinColumn(name=”developer_id”)注解, 其中developer_id为其他表(Developer)的主键

https://www.cnblogs.com/boywwj/p/8092915.html

 

@OneToMany 注解详解

解释:一张合同对应多个执行计划, 但是一个执行计划只能对应一张合同,典型的一对多关系 

@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.MERGE })
@JoinColumn(name = "contract_id")
public List<DeveloperPlan> getPlanList() {
	return planList;
}

@JoinColumn(name = “contract_id”)中的contract_id为many一方的外键字段

 

无限递归调用解决

 A类中,有个属性:List<B> b, A与B的关系为 OneToMany;在B类中,有属性A a,引用到A中的字段id,并作为外键。hibernate查询结果正常,可以看到返回的A对象中,有b参数值,但在json转换的时候就出现了无限递归的情况。个人分析,应该是json在序列化A中的b属性的时候,找到了B类,然后序列化B类,而B类中有a属性,因此,为了序列化a属性,json又得去序列化A类,如此递归反复,造成该问题。

解决:

  在B类中a的getter setter方法上加注解@JsonBackReference,其实自己试过只在setter方法上加@JsonBackReference也够了。

官方文档:https://docs.spring.io/spring-data/jpa/docs/1.11.9.RELEASE/reference/html/#appendix

参考:

https://blog.csdn.net/yswknight/article/details/79257372

https://www.jianshu.com/p/14c062a805e7

https://blog.csdn.net/xiaodaiye/article/details/51118870

https://blog.csdn.net/cqyyjdw/article/details/78972352

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章