栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring-date-jpa 多对多双向关系映射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring-date-jpa 多对多双向关系映射

多对多主要要解决的问题有两个

第一个问题是关系维护问题,因为如果两个表里都有@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;
  }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571486.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号