多对多主要要解决的问题有两个
第一个问题是关系维护问题,因为如果两个表里都有@ManyToMany关系会默认生成两张中间表
@ManyToMany(mappedBy="users")//mappedBy,这个参数的意思是这个表不做关系管理,使用对应的表里的users字段的关系管理(我理解就是不生成中间表用另一个表里的中间表的意思)随意加在一个实体类就可以
关系维护就是生成中间表双向关系不能用默认的,必须要做关系维护关联中间表
//关系维护
@JoinTable(name="user_hoppys",//中间表表名
joinColumns={@JoinColumn(name="hoppys_id",referencedColumnName="id")},//这个表的外键和主键
inverseJoinColumns={@JoinColumn(name="user_id",referencedColumnName="id")})//对应的表的外键和主键
以上代码可以解决关系维护的问题
第二个问题是死循环问题,因为查一个表的时候会查对应的表,对应的表里还会包含本表,所以会造成死循环这个问题非常好解决加上
@JsonIgnoreProperties(value = { "hoppys" })//排除了排除对应表里对应的本表的字段
以下是代码
package com.chenkang.user1119.entity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
import java.util.List;
@Entity
@Table(name = "user")
public class User {
@Id()
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
private String name;
private Date birthday;
private String sex;
private String nativePlace;
private String address;
@ManyToMany(mappedBy="users")//这个表不是做关系维护的,关系维护是在对应的表的users字段
@JsonIgnoreProperties(value = { "users" })//排除了hoppy表里的users字段避免死循环
private List hoppys;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getNativePlace() {
return nativePlace;
}
public void setNativePlace(String nativePlace) {
this.nativePlace = nativePlace;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public List getHoppys() {
return hoppys;
}
public void setHoppys(List hoppys) {
this.hoppys = hoppys;
}
public User() {
}
public User(String name, Date birthday, String sex, String nativePlace, String address) {
this.name = name;
this.birthday = birthday;
this.sex = sex;
this.nativePlace = nativePlace;
this.address = address;
}
public User(Long id, String name, Date birthday, String sex, String nativePlace, String address) {
this.id = id;
this.name = name;
this.birthday = birthday;
this.sex = sex;
this.nativePlace = nativePlace;
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + ''' +
", birthday=" + birthday +
", sex='" + sex + ''' +
", nativePlace='" + nativePlace + ''' +
", address='" + address + ''' +
", hoppys=" + hoppys +
'}';
}
}
package com.chenkang.user1119.entity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.naming.Name;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name = "hoppy")
public class Hoppy {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany
@JsonIgnoreProperties(value = { "hoppys" })//排除了hoppy表里的users字段
//关系维护 //中间表表名 表中这个表的id 实体类中这个表的id 对应的表
@JoinTable(name="user_hoppys",joinColumns={@JoinColumn(name="hoppys_id",referencedColumnName="id")},inverseJoinColumns={@JoinColumn(name="user_id",referencedColumnName="id")})
private List users;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getUsers() {
return users;
}
public void setUsers(List users) {
this.users = users;
}
public Hoppy() {
}
public Hoppy(Long id, String name, List users) {
this.id = id;
this.name = name;
this.users = users;
}
}



