1 回答

TA貢獻(xiàn)14條經(jīng)驗(yàn) 獲得超9個(gè)贊
首先你要理解這是雙向關(guān)聯(lián),雙向關(guān)聯(lián)中你如果從數(shù)據(jù)庫里面查詢一個(gè)User對(duì)象,那么User對(duì)象里面有Role,Role里面又有User對(duì)象,那么你用syso輸出User對(duì)象,如果toString方法里面包含有輸出User.roles的話,那么是必然會(huì)造成死循環(huán)的。如果你用sping mvc等框架將后臺(tái)數(shù)據(jù)返回給前臺(tái)也是同理,也會(huì)造成返回的JSON數(shù)據(jù)死循環(huán)
那么要如何解決?
解決辦法就是在序列化實(shí)例的時(shí)候中斷循環(huán)就好。首先你要理解這不是spring-data-jpa的問題,這是一個(gè)序列化的問題。
例如如果是用jsckson對(duì)數(shù)據(jù)進(jìn)行序列化的的話,可以使用下面的注解。
import?com.fasterxml.jackson.annotation.JsonIgnoreProperties; @Data @Entity @Table(name?=?"sys_user") public?class?User?{ ????@Id ????@GeneratedValue ????@Column(name?=?"user_id") ????private?Integer?userId; ????@Column(name?=?"username") ????private?String?username; ????@JsonIgnoreProperties(value?=?{?"users"?}) ????@ManyToMany(cascade?=?{CascadeType.ALL},?fetch?=?FetchType.LAZY) ????@JoinTable( ????????????name?=?"user_role", ????????????joinColumns?=?{@JoinColumn(name?=?"user_id")}, ????????????inverseJoinColumns?=?{@JoinColumn(name?=?"role_id")} ????) ????private?Set<Role>?roles; }
這樣的話,你再序列化User對(duì)象時(shí),
user.roles 這個(gè)對(duì)象中只有 user.roles[i].id 和? users.roles[i].name 而沒有 user.roles.users?。。?!
ok,問題解決!?。?/p>
添加回答
舉報(bào)