mappedBy跟JoinColumn/JoinTable .

a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
b) mappedBy标签一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方);
c) mappedBy的含义,应该理解为,拥有方能够自动维护 跟被拥有方的关系;
   当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的。

d) mappedBy跟JoinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被 拥有方。mappedBy这方定义的JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表

 

人跟身份证双向关联

在Person 里面定义的注解:

@OneToOne(cascade={CascadeType.ALL},optional=true)
public IDCard getIdCard() {
         return idCard;
}

在IDCard 里面定义的注释:

//这里的idCard表示Person里面的idCard成员变量

@OneToOne(cascade=CascadeType.ALL,mappedBy="idCard" , optional=false)

public Person getPerson() {
       return person;
}

多了一个mappedBy这个方法,它表示什么呢?它表示当前所在表和Person的关系是定义在Person里面的idCard这个成员上面的,它表示此表是一对一关系中的从表,也就是关系是在person表里面维护的 ,这一点很重要 . Person表是关系的维护者,owner side,有主导权,它有个外键指向IDCard。
我们也可以让主导权在IDCard上面,也就是让它产生一个指向Person的外键,这也是可以的,但是最好是让Person来维护整个关系,这样更符合我们正常的思维 .

我们也可以看到在Person里面IDCard是注释是optional=true,也就是说一个人是可以没有身份证的,但是一个身份证不可以没有人,所以在IDCard里面注释person的时候,optional就为false了,这样就可以防止一个空的身份证记录进数据库.


package com.kucun.data.entity; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; /** * 产品组件关联类 * @author Administrator * */ @Entity @Table(name="chanpin_zujian") public class Chanpin_zujian { @Id private Integer id; // 关联到产品 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chanpin_id") private Chanpin chanpin; // 关联到组件 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "zujian_id") private Zujian zujian; // 关联到板材 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "bancai_id") private Bancai bancai; private Double one_howmany; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Chanpin getChanpin() { return chanpin; } public void setChanpin(Chanpin chanpin) { this.chanpin = chanpin; } public Zujian getZujian() { return zujian; } public void setZujian(Zujian zujian) { this.zujian = zujian; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Double getOne_howmany() { return one_howmany; } public void setOne_howmany(Double one_howmany) { this.one_howmany = one_howmany; } public Chanpin_zujian() { super(); // TODO Auto-generated constructor stub } } package com.kucun.data.entity; import java.util.Date; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; /** * 订单 * @author Administrator * */ @Entity @Table(name="dingdan", uniqueConstraints = { @UniqueConstraint(columnNames = "number") }) public class Dingdan { @Id private Integer id; //订单号 private String number; private Date xiadan; private Date jiaohuo; @OneToMany( mappedBy = "dingdan", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true ) private List<Dingdan_chanpin> dingdan_chanpins; // 优化订单与订单组件关联 @OneToMany( mappedBy = "dingdan", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true ) private List<Dingdan_chanpin_zujian> dingdan_chanpins_zujians; public Date getXiadan() { return xiadan; } public void setXiadan(Date xiadan) { this.xiadan = xiadan; } public Date getJiaohuo() { return jiaohuo; } public void setJiaohuo(Date jiaohuo) { this.jiaohuo = jiaohuo; } public List<Dingdan_chanpin_zujian> getDingdan_chanpins_zujians() { return dingdan_chanpins_zujians; } public void setDingdan_chanpins_zujians(List<Dingdan_chanpin_zujian> dingdan_chanpins_zujians) { this.dingdan_chanpins_zujians = dingdan_chanpins_zujians; } public List<Dingdan_chanpin> getDingdan_chanpins() { return dingdan_chanpins; } public void setDingdan_chanpins(List<Dingdan_chanpin> dingdan_chanpins) { this.dingdan_chanpins = dingdan_chanpins; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Dingdan(Integer id, String number) { super(); this.id = id; this.number = number; } public Dingdan() { super(); // TODO Auto-generated constructor stub } } package com.kucun.data.entity; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; /** * 订单和产品关联 * @author Administrator * */ @Entity @Table(name="dingdan_chanpin") public class Dingdan_chanpin { @Id private Integer id; //产品信息 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dingdan_id") // 指 private Dingdan dingdan; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chanpin_id") // 指 private Chanpin chanpin; private Integer shuliang;//产品数量; public Chanpin getChanpin() { return chanpin; } public void setChanpin(Chanpin chanpin) { this.chanpin = chanpin; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan getDingdan() { return dingdan; } public void setDingdan(Dingdan dingdan) { this.dingdan = dingdan; } public Chanpin getChanping() { return chanpin; } public void setChanping(Chanpin chanping) { this.chanpin = chanping; } } package com.kucun.data.entity; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; /** * 一个订单中的产品组件订购板材数量 * @author Administrator * */ @Entity public class Dingdan_chanpin_zujian { @Id private Integer id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dingdan_id") // 指定外键列 private Dingdan dingdan; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chanpin_zujian_id") // 指定外键列 private Chanpin_zujian zujian; // 修改为单数形式 //板材 @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "bancai_id") private Bancai bancai; //订购数 private Integer shuliang ; public Dingdan_chanpin_zujian() { super(); // TODO Auto-generated constructor stub } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan getDingdan() { return dingdan; } public void setDingdan(Dingdan dingdan) { this.dingdan = dingdan; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Chanpin_zujian getZujian() { return zujian; } public void setZujian(Chanpin_zujian zujian) { this.zujian = zujian; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } } package com.kucun.data.entity; public interface EntityBasis { Integer getId(); } package com.kucun.data.entity; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; /** * 通信类 * @author Administrator * */ public class Information { private static final ObjectMapper mapper = new ObjectMapper(); private Integer Status ; private String text; private Object data; public Integer getStatus() { return Status; } public void setStatus(Integer status) { Status = status; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Information(Integer status, String text, Object data) { super(); Status = status; this.text = text; this.data = data; } @SuppressWarnings({"unchecked","rawtypes"}) public Information(Integer status, String text, String data, Class T) throws Exception { super(); Status = status; this.text = text; this.data = fromJson(data,T); } public Information() { super(); // TODO Auto-generated constructor stub } public String DataJson() throws JsonProcessingException { // Java对象转JSON return mapper.writeValueAsString(this); } @SuppressWarnings("unchecked") public <T> T fromJson(String json, Class<T> clazz) throws Exception { data= mapper.readValue(json, clazz); return (T) data; } public static Information NewSuccess(Object data) { return new Information(200, "success", data); } public static Information NewSuccess(String data) { return new Information(200, "success", data); } public static Information Newfail(Integer status,String text,Object data) { return new Information(status, "success", data); } } package com.kucun.data.entity; import java.util.Date; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity public class Jinhuo { @Id private Integer id; @ManyToOne private Dingdan dingdan; @ManyToOne private Chanpin chanpin; @ManyToOne private Zujian zujian; @ManyToOne private Bancai bancai; private Integer shuliang; private Date date; @ManyToOne private User user; public Jinhuo(Integer id, Dingdan dingdan, Chanpin chanpin, Zujian zujian, Bancai bancai, Integer shuliang, Date date, User user) { super(); this.id = id; this.dingdan = dingdan; this.chanpin = chanpin; this.zujian = zujian; this.bancai = bancai; this.shuliang = shuliang; this.date = date; this.user = user; } public Jinhuo() { super(); // TODO Auto-generated constructor stub } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan getDingdan() { return dingdan; } public void setDingdan(Dingdan dingdan) { this.dingdan = dingdan; } public Chanpin getChanpin() { return chanpin; } public void setChanpin(Chanpin chanpin) { this.chanpin = chanpin; } public Zujian getZujian() { return zujian; } public void setZujian(Zujian zujian) { this.zujian = zujian; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } package com.kucun.data.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; /** * 库存 * @author Administrator * */ @Entity public class Kucun { @Id private Integer id; private Long shuliang; @OneToOne(fetch = FetchType.LAZY) // 正确映射 Bancai 实体 @JoinColumn(name = "bancai_id", referencedColumnName = "id") private Bancai bancai; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Long getShuliang() { return shuliang; } public void setShuliang(Long shuliang) { this.shuliang = shuliang; } public Kucun(Integer id, Bancai bancai, Long shuliang) { super(); this.id = id; this.bancai = bancai; this.shuliang = shuliang; } public Kucun() { super(); // TODO Auto-generated constructor stub } } package com.kucun.data.entity; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; /** * 木皮 * @author Administrator * */ @Entity @Table(name="caizhi", uniqueConstraints = { @UniqueConstraint(columnNames = "name") }) @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) public class Mupi extends SimpleEntity { /** * 是否有油漆 */ private Boolean you; // 添加 OneToMany 映射 @OneToMany(mappedBy = "mupi1") // 指向 Bancai 中的 mupi1 字段 @JsonIgnore private List<Bancai> bancaisForMupi1; @OneToMany(mappedBy = "mupi2") // 指向 Bancai 中的 mupi2 字段 @JsonIgnore private List<Bancai> bancaisForMupi2; public List<Bancai> getBancaisForMupi1() { return bancaisForMupi1; } public void setBancaisForMupi1(List<Bancai> bancaisForMupi1) { this.bancaisForMupi1 = bancaisForMupi1; } public List<Bancai> getBancaisForMupi2() { return bancaisForMupi2; } public void setBancaisForMupi2(List<Bancai> bancaisForMupi2) { this.bancaisForMupi2 = bancaisForMupi2; } public Mupi() { super(); } public Boolean getYou() { return you; } public void setYou(Boolean you) { this.you = you; } } package com.kucun.data.entity; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class SimpleEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(nullable = false, unique = true) private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } // Getters and Setters... } package com.kucun.data.entity; import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import com.fasterxml.jackson.databind.ObjectMapper; /** * 用户 * @author Administrator * */ @Entity @Table(name="user") public class User implements EntityBasis{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; /** * 名字 */ @Column(nullable=false) private String name; /** * 账号 */ @Column(nullable=false) private String andy; /** * 密码 */ @Column(nullable=false) private String pass; /** * 权限 */ @Column(nullable=false) private int role; public User() { super(); } public User(int id, String name, String andy, String pass) { super(); this.id = id; this.name = name; this.andy = andy; this.pass = pass; } public Integer getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAndy() { return andy; } public void setAndy(String andy) { this.andy = andy; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public int getRole() { System.out.println(role); return role; } public void setRole(int role) { this.role = role; } @Override public String toString() { return "{id:" + id + ", name:" + name + ", andy:" + andy + ", pass:" + pass + ", role:" + role + "}"; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(andy, user.andy)&& Objects.equals(role, user.role); //添加所有属性比较 } @Override public int hashCode() { return Objects.hash(id, name, andy,pass,role); } } package com.kucun.data.entity; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.OneToMany; @Entity public class Zujian extends SimpleEntity{ // 反向关联到产品组件 @OneToMany( mappedBy = "zujian", cascade = CascadeType.ALL, fetch = FetchType.LAZY ) private List<Chanpin_zujian> chanpins; public List<Chanpin_zujian> getChanpins() { return chanpins; } public void setChanpins(List<Chanpin_zujian> chanpins) { this.chanpins = chanpins; } } package com.kucun.data.entity; import java.lang.annotation.Annotation; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.persistence.Table; import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonManagedReference; /** * 板材 * @author Administrator * */ @Entity @Table(name="bancai") public class Bancai implements Entity { @Id private int id; @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "caizhi_id") // @JsonManagedReference // 标记为“主”关联方 private Caizhi caizhi; @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "mupi1_id") private Mupi mupi1; @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "mupi2_id") private Mupi mupi2; private Double houdu; @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "kucun_id", referencedColumnName = "id") private Kucun kucun; public Kucun getKucun() { return kucun; } public void setKucun(Kucun kucun) { this.kucun = kucun; } public Integer getId() { return id; } public void setId(int id) { this.id = id; } public Caizhi getCaizhi() { return caizhi; } public void setCaizhi(Caizhi caizhi) { this.caizhi = caizhi; } public Mupi getMupi1() { return mupi1; } public void setMupi1(Mupi mupi1) { this.mupi1 = mupi1; } public Mupi getMupi2() { return mupi2; } public void setMupi2(Mupi mupi2) { this.mupi2 = mupi2; } public Double getHoudu() { return houdu; } public void setHoudu(Double houdu) { this.houdu = houdu; } public Bancai(int id, Caizhi caizhi, Mupi mupi1, Mupi mupi2, Double houdu) { super(); this.id = id; this.caizhi = caizhi; this.mupi1 = mupi1; this.mupi2 = mupi2; this.houdu = houdu; } public Bancai() { super(); } @Override public Class<? extends Annotation> annotationType() { // TODO Auto-generated method stub return null; } @Override public String name() { // TODO Auto-generated method stub return null; } } package com.kucun.data.entity; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; /** * 板材材质 * @author Administrator * */ @Entity @Table(name="caizhi", uniqueConstraints = { @UniqueConstraint(columnNames = "name") }) @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) public class Caizhi extends SimpleEntity{ @OneToMany(mappedBy="caizhi") @JsonIgnore private List<Bancai> bancais; public Caizhi() { super(); } // 添加反向关联维护方法 public void addBancai(Bancai bancai) { bancais.add(bancai); bancai.setCaizhi(this); } // 添加移除方法 public void removeBancai(Bancai bancai) { bancais.remove(bancai); bancai.setCaizhi(null); } public List<Bancai> getBancais() { return bancais; } public void setBancais(List<Bancai> bancais) { this.bancais = bancais; } } package com.kucun.data.entity; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; /** * 产品类 * @author Administrator * */ @Entity @Table(name="chanpin", uniqueConstraints = { @UniqueConstraint(columnNames = "bianhao") }) public class Chanpin { @Id private Integer id; // 关联订单产品 @OneToMany( mappedBy = "chanpin", cascade = CascadeType.ALL, fetch = FetchType.LAZY ) private List<Dingdan_chanpin> dingdans; private String bianhao; @OneToMany( mappedBy = "chanpin", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true ) private List<Chanpin_zujian> zujians; // 添加/移除组件的辅助方法 public void addZujian(Chanpin_zujian zujian) { zujians.add(zujian); zujian.setChanpin(this); } public void removeZujian(Chanpin_zujian zujian) { zujians.remove(zujian); zujian.setChanpin(null); } // 添加/移除组件的辅助方法 public void addDingdan(Dingdan_chanpin dingdan) { dingdans.add(dingdan); dingdan.setChanpin(this); } public void removeDingdan(Dingdan_chanpin dingdian) { dingdans.remove(dingdian); dingdian.setChanpin(null); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public List<Dingdan_chanpin> getDingdans() { return dingdans; } public void setDingdans(List<Dingdan_chanpin> dingdans) { this.dingdans = dingdans; } public String getBianhao() { return bianhao; } public void setBianhao(String bianhao) { this.bianhao = bianhao; } public List<Chanpin_zujian> getZujians() { return zujians; } public void setZujians(List<Chanpin_zujian> zujians) { this.zujians = zujians; } public Chanpin(Integer id, List<Dingdan_chanpin> dingdians, String bianhao, List<Chanpin_zujian> zujians) { super(); this.id = id; this.dingdans = dingdians; this.bianhao = bianhao; this.zujians = zujians; } public Chanpin() { super(); // TODO Auto-generated constructor stub } } package com.kucun.dataDo; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; //ChanpinRepository.java @Repository public interface ChanpinRepository extends JpaRepository<Chanpin, Integer> { boolean existsByBianhao(String bianhao); List<Chanpin> findByBianhao(String bianhao); } package com.kucun.dataDo; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Chanpin_zujian; import com.kucun.data.entity.Dingdan; //ChanpinRepository.java //ChanpinZujianRepository.java @Repository public interface ChanpinZujianRepository extends JpaRepository<Chanpin_zujian, Integer> { boolean existsByChanpin_IdAndZujian_Id(Integer chanpinid, Integer zujianid); Chanpin_zujian findByChanpin_IdAndZujian_Id(Integer chanpinid, Integer zujianid); } package com.kucun.dataDo; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Dingdan_chanpin; //DingdanChanpinRepository.java @Repository public interface DingdanChanpinRepository extends JpaRepository<Dingdan_chanpin, Integer> { boolean existsByDingdan_IdAndChanpin_Id(Integer dingdanid, Integer chanpinid); List<Dingdan_chanpin> findByChanpin_Id(Integer id); } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Dingdan_chanpin_zujian; //ChanpinRepository.java //DingdanChanpinZujianRepository.java @Repository public interface DingdanChanpinZujianRepository extends JpaRepository<Dingdan_chanpin_zujian, Integer> { boolean existsByDingdan_IdAndZujian_Id(Integer dingdanid, Integer chanpin_zujianid); } package com.kucun.dataDo; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Dingdan; import com.kucun.data.entity.DTO.DingdanKucunDTO; @Repository public interface DingdanRepository extends JpaRepository<Dingdan, Integer> { boolean existsByNumber(String number); // // // // 自定义查询:获取订单及相关库存信息 // @Query("SELECT new com.kucun.data.dto.OrderInventoryDTO(" + // "d.id, d.number, dc.id, cp.bianhao, b.id, b.houdu, c.name, k.shuliang) " + // "FROM Dingdan d " + // "JOIN d.dingdan_chanpins dc " + // "JOIN dc.chanping cp " + // "JOIN cp.zujians cz " + // "JOIN cz.bancai b " + // "JOIN b.caizhi c " + // "JOIN b.kucun k " + // "WHERE d.id = :orderId") // List<DingdanKucunDTO> findInventoryByOrderId(@Param("orderId") Integer orderId); //订单号查询 @Query("SELECT DISTINCT d FROM Dingdan d " + "WHERE d.number = :number") Dingdan findByNumberWithFullDetails(@Param("number") String number); } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Kucun; //ChanpinRepository.java public interface KucunRepository extends JpaRepository<Kucun, Integer> { } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Mupi; @Repository public interface MupiRepository extends JpaRepository<Mupi,Integer>{ } package com.kucun.dataDo; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.kucun.data.entity.User; @Repository public interface UserRepository extends JpaRepository<User, Long> { // 登录 @Query(value="select * from user where andy=:andy and pass=:pass",nativeQuery = true) User GetUsers(@Param(value="andy")String andy, @Param("pass")String pass); @Query(value="select * from user where andy=:andy",nativeQuery = true) User findByAndy(@Param(value="andy")String andy); } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Zujian; //ChanpinRepository.java @Repository public interface ZujianRepository extends JpaRepository<Zujian, Integer> { boolean existsByName(String name); } package com.kucun.dataDo; import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Bancai; import com.kucun.data.entity.DTO.BancaiDTO; @Repository public interface BancaiRepository extends JpaRepository<Bancai, Integer> { @Query("SELECT b FROM Bancai b " + "JOIN b.caizhi c " + "JOIN b.mupi1 m1 " + "JOIN b.mupi2 m2 " + "WHERE c.name = :caizhiName " + "AND m1.name = :mupi1Name " + "AND m2.name = :mupi2Name") List<Bancai> findComplexJoin(@Param("caizhiName") String caizhiName, @Param("mupi1Name") String mupi1Name, @Param("mupi2Name") String mupi2Name); @Query("SELECT COUNT(b) FROM Bancai b " + "JOIN b.caizhi c " + "JOIN b.mupi1 m1 " + "JOIN b.mupi2 m2 " + "WHERE c.id = :caizhiid " + "AND m1.id = :mupi1id " + "AND m2.id = :mupi2id") Integer findComplexidCOUNT(@Param("caizhiid") Integer caizhiid, @Param("mupi1id") Integer mupi1id, @Param("mupi2id") Integer mupi2id); // 使用JOIN FETCH预加载所有关联 @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "WHERE b.id = :id") Optional<Bancai> findFullDetailById(@Param("id") Integer id); // 获取板材及其关联的所有木皮信息(包括mupi1和mupi2) @Query("SELECT b, c, m1, m2 FROM Bancai b " + "JOIN b.caizhi c " + "JOIN b.mupi1 m1 " + "JOIN b.mupi2 m2 " + "WHERE b.id = :id") List<Object[]> findFullAssociations(@Param("id") Integer id); // 批量获取个板材的完整信息 @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "WHERE b.id IN :ids") List<Bancai> findBatchDetails(@Param("ids") List<Integer> ids); // 批量获取所有板材的完整信息 @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " ) List<Bancai> findBatchALLDetails(); // 批量获取个板材的完整信息 @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "WHERE b.houdu IN :hou") List<Bancai> findBatchHoudu(@Param("hou") List<Double> hou); @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "LEFT JOIN FETCH b.kucun " + "WHERE b.id = :id") Optional<Bancai> findByIdWithAssociations(@Param("id") int id); @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "LEFT JOIN FETCH b.kucun ") List<Bancai> findByAllWithAssociations(); } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Caizhi; @Repository public interface CaizhiRepository extends JpaRepository<Caizhi, Integer> { } 创建api输出全部数据 ,下级类只输出id,结构不变 ,下级类还是对象
06-10
package com.teacher.service.Impl; import com.teacher.exception.ContentProcessingException; import com.teacher.exception.ResourceNotFoundException; import com.teacher.model.entity.Courseware; import com.teacher.repository.CoursewareRepository; import com.teacher.service.AiService; import com.teacher.service.ContentService; import com.teacher.util.DocumentParser; import com.teacher.util.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.UUID; @Service public class ContentServiceImpl implements ContentService { @Value("${app.upload.dir}") private String uploadDir; private final CoursewareRepository coursewareRepository; private final DocumentParser documentParser; private final AiService aiService; private final FileUtils fileUtils; @Autowired public ContentServiceImpl(CoursewareRepository coursewareRepository, DocumentParser documentParser, AiService aiService, FileUtils fileUtils) { this.coursewareRepository = coursewareRepository; this.documentParser = documentParser; this.aiService = aiService; this.fileUtils = fileUtils; } @Override @Transactional public Courseware uploadCourseware(MultipartFile file, String subject, String gradeLevel) { try { // 验证文件不为空 if (file.isEmpty()) { throw new IllegalArgumentException("上传文件不能为空"); } // 创建上传目录(如果不存在) Path uploadPath = Paths.get(uploadDir); if (!Files.exists(uploadPath)) { Files.createDirectories(uploadPath); } // 1. 保存文件到存储系统 String originalFilename = file.getOriginalFilename(); String fileExtension = fileUtils.getFileExtension(originalFilename); String uniqueFilename = UUID.randomUUID() + "." + fileExtension; Path filePath = uploadPath.resolve(uniqueFilename); file.transferTo(filePath); // 2. 创建课件记录 Courseware courseware = new Courseware(); courseware.setTitle(originalFilename); courseware.setSubject(subject); courseware.setGradeLevel(gradeLevel); courseware.setFilePath(filePath.toString()); courseware.setFileType(file.getContentType()); courseware.setFileSize(file.getSize()); // 3. 解析内容并提取元数据 String content = documentParser.parseDocument(file); courseware.setContent(content); // 4. 使用AI提取关键概念 List<String> keyConcepts = aiService.extractKnowledgePoints(content); courseware.setKeyConcepts(String.join(",", keyConcepts)); // 5. 设置版本信息(初始版本) courseware.setVersion(1); courseware.setRootId(null); // 初始版本没有根ID // 6. 保存到数据库 Courseware saved = coursewareRepository.save(courseware); // 7. 设置根ID(如果是第一个版本) if (saved.getRootId() == null) { saved.setRootId(saved.getId()); return coursewareRepository.save(saved); } return saved; } catch (IOException e) { throw new ContentProcessingException("文件上传失败: " + e.getMessage(), e); } } @Override public Courseware getCoursewareById(Long id) { return coursewareRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException("课件不存在,ID: " + id)); } @Override public Page<Courseware> searchCoursewares(String keyword, String subject, Pageable pageable) { if (keyword == null || keyword.isEmpty()) { return coursewareRepository.findBySubject(subject, pageable); } return coursewareRepository.searchByKeywordAndSubject(keyword, subject, pageable); } @Override @Transactional public void deleteCourseware(Long id) { Courseware courseware = getCoursewareById(id); // 删除物理文件(仅当文件存在时) if (courseware.getFilePath() != null) { fileUtils.deleteFile(courseware.getFilePath()); } // 删除数据库记录 coursewareRepository.deleteById(id); } @Override public String parseDocumentContent(Long coursewareId) { Courseware courseware = getCoursewareById(coursewareId); return courseware.getContent(); // 已解析的内容 } @Override public List<String> extractKeyConcepts(Long coursewareId) { Courseware courseware = getCoursewareById(coursewareId); if (courseware.getKeyConcepts() == null || courseware.getKeyConcepts().isEmpty()) { return Collections.emptyList(); } return List.of(courseware.getKeyConcepts().split(",")); } @Override public List<Courseware> recommendRelatedContent(Long coursewareId, int count) { Courseware source = getCoursewareById(coursewareId); // 检查关键概念是否为空 if (source.getKeyConcepts() == null || source.getKeyConcepts().isEmpty()) { return Collections.emptyList(); } // 基于关键概念和主题推荐相关课件 return coursewareRepository.findRelatedContent( source.getSubject(), source.getKeyConcepts(), source.getId(), PageRequest.of(0, count) ).getContent(); } @Override @Transactional public Courseware updateCourseware(Long id, MultipartFile file) { Courseware existing = getCoursewareById(id); try { // 1. 保存新文件 String originalFilename = file.getOriginalFilename(); String fileExtension = fileUtils.getFileExtension(originalFilename); String uniqueFilename = UUID.randomUUID() + "." + fileExtension; Path filePath = Paths.get(uploadDir, uniqueFilename); file.transferTo(filePath); // 2. 解析新内容 String content = documentParser.parseDocument(file); // 3. 更新关键概念 List<String> keyConcepts = aiService.extractKnowledgePoints(content); String keyConceptsStr = String.join(",", keyConcepts); // 4. 创建新版本记录 Courseware newVersion = new Courseware(); newVersion.setTitle(originalFilename); newVersion.setSubject(existing.getSubject()); newVersion.setGradeLevel(existing.getGradeLevel()); newVersion.setFilePath(filePath.toString()); newVersion.setFileType(file.getContentType()); newVersion.setFileSize(file.getSize()); newVersion.setContent(content); newVersion.setKeyConcepts(keyConceptsStr); // 5. 设置版本信息 newVersion.setVersion(existing.getVersion() + 1); newVersion.setPreviousVersionId(existing.getId()); newVersion.setRootId(existing.getRootId() != null ? existing.getRootId() : existing.getId()); // 6. 保存新版本 return coursewareRepository.save(newVersion); } catch (IOException e) { throw new ContentProcessingException("课件更新失败: " + e.getMessage(), e); } } @Override public List<Courseware> getCoursewareVersions(Long id) { Courseware current = getCoursewareById(id); Long rootId = current.getRootId() != null ? current.getRootId() : id; return coursewareRepository.findVersionsByRootId(rootId); } } 出现了无法解析 'Courseware' 中的方法 'setGradeLevel'无法解析 'Courseware' 中的方法 'setFilePath'无法解析 'Courseware' 中的方法 'setFileType'无法解析 'Courseware' 中的方法 'setFileSize'无法解析 'Courseware' 中的方法 'setKeyConcepts'无法解析 'Courseware' 中的方法 'setVersion'无法解析 'Courseware' 中的方法 'setRootId'无法解析 'Courseware' 中的方法 'getRootId' Courseware的代码如下package com.teacher.model.entity; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; @Entity @Table(name = "courseware") @Getter @Setter public class Courseware { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, length = 100) private String title; @Column(nullable = false, length = 50) private String subject; @Column(nullable = false, columnDefinition = "TEXT") private String content; @Column(name = "created_at", nullable = false, updatable = false) private LocalDateTime createdAt = LocalDateTime.now(); @Column(name = "updated_at") private LocalDateTime updatedAt; @Column(name = "is_active", nullable = false) private boolean active = true; // 关联知识点 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "knowledge_point_id") private KnowledgePoint knowledgePoint; @PreUpdate protected void onUpdate() { this.updatedAt = LocalDateTime.now(); } } 请判断哪些方法是需要的,哪些是不需要的可以进行删除,请把修改后的代码给出来
最新发布
07-11
package com.kucun.dataDo; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Dingdan; import com.kucun.data.entity.DTO.DingdanKucunDTO; @Repository public interface DingdanRepository extends JpaRepository<Dingdan, Integer> { boolean existsByNumber(String number); // // // // 自定义查询:获取订单及相关库存信息 // @Query("SELECT new com.kucun.data.dto.OrderInventoryDTO(" + // "d.id, d.number, dc.id, cp.bianhao, b.id, b.houdu, c.name, k.shuliang) " + // "FROM Dingdan d " + // "JOIN d.dingdan_chanpins dc " + // "JOIN dc.chanping cp " + // "JOIN cp.zujians cz " + // "JOIN cz.bancai b " + // "JOIN b.caizhi c " + // "JOIN b.kucun k " + // "WHERE d.id = :orderId") // List<DingdanKucunDTO> findInventoryByOrderId(@Param("orderId") Integer orderId); //订单号查询 @Query("SELECT DISTINCT d FROM Dingdan d " + "WHERE d.number = :number") Dingdan findByNumberWithFullDetails(@Param("number") String number); } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Kucun; //ChanpinRepository.java public interface KucunRepository extends JpaRepository<Kucun, Integer> { } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Mupi; @Repository public interface MupiRepository extends JpaRepository<Mupi,Integer>{ } package com.kucun.dataDo; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.kucun.data.entity.User; @Repository public interface UserRepository extends JpaRepository<User, Long> { // 登录 @Query(value="select * from user where andy=:andy and pass=:pass",nativeQuery = true) User GetUsers(@Param(value="andy")String andy, @Param("pass")String pass); @Query(value="select * from user where andy=:andy",nativeQuery = true) User findByAndy(@Param(value="andy")String andy); } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Zujian; //ChanpinRepository.java @Repository public interface ZujianRepository extends JpaRepository<Zujian, Integer> { boolean existsByName(String name); } package com.kucun.dataDo; import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Bancai; import com.kucun.data.entity.DTO.BancaiDTO; @Repository public interface BancaiRepository extends JpaRepository<Bancai, Integer> { @Query("SELECT b FROM Bancai b " + "JOIN b.caizhi c " + "JOIN b.mupi1 m1 " + "JOIN b.mupi2 m2 " + "WHERE c.name = :caizhiName " + "AND m1.name = :mupi1Name " + "AND m2.name = :mupi2Name") List<Bancai> findComplexJoin(@Param("caizhiName") String caizhiName, @Param("mupi1Name") String mupi1Name, @Param("mupi2Name") String mupi2Name); @Query("SELECT COUNT(b) FROM Bancai b " + "JOIN b.caizhi c " + "JOIN b.mupi1 m1 " + "JOIN b.mupi2 m2 " + "WHERE c.id = :caizhiid " + "AND m1.id = :mupi1id " + "AND m2.id = :mupi2id") Integer findComplexidCOUNT(@Param("caizhiid") Integer caizhiid, @Param("mupi1id") Integer mupi1id, @Param("mupi2id") Integer mupi2id); // 使用JOIN FETCH预加载所有关联 @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "WHERE b.id = :id") Optional<Bancai> findFullDetailById(@Param("id") Integer id); // 获取板材及其关联的所有木皮信息(包括mupi1和mupi2) @Query("SELECT b, c, m1, m2 FROM Bancai b " + "JOIN b.caizhi c " + "JOIN b.mupi1 m1 " + "JOIN b.mupi2 m2 " + "WHERE b.id = :id") List<Object[]> findFullAssociations(@Param("id") Integer id); // 批量获取个板材的完整信息 @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "WHERE b.id IN :ids") List<Bancai> findBatchDetails(@Param("ids") List<Integer> ids); // 批量获取所有板材的完整信息 @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " ) List<Bancai> findBatchALLDetails(); // 批量获取个板材的完整信息 @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "WHERE b.houdu IN :hou") List<Bancai> findBatchHoudu(@Param("hou") List<Double> hou); @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "LEFT JOIN FETCH b.kucun " + "WHERE b.id = :id") Optional<Bancai> findByIdWithAssociations(@Param("id") int id); @Query("SELECT b FROM Bancai b " + "LEFT JOIN FETCH b.caizhi " + "LEFT JOIN FETCH b.mupi1 " + "LEFT JOIN FETCH b.mupi2 " + "LEFT JOIN FETCH b.kucun ") List<Bancai> findByAllWithAssociations(); } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Caizhi; @Repository public interface CaizhiRepository extends JpaRepository<Caizhi, Integer> { } package com.kucun.dataDo; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; //ChanpinRepository.java @Repository public interface ChanpinRepository extends JpaRepository<Chanpin, Integer> { boolean existsByBianhao(String bianhao); List<Chanpin> findByBianhao(String bianhao); } package com.kucun.dataDo; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Chanpin_zujian; import com.kucun.data.entity.Dingdan; //ChanpinRepository.java //ChanpinZujianRepository.java @Repository public interface ChanpinZujianRepository extends JpaRepository<Chanpin_zujian, Integer> { boolean existsByChanpin_IdAndZujian_Id(Integer chanpinid, Integer zujianid); Chanpin_zujian findByChanpin_IdAndZujian_Id(Integer chanpinid, Integer zujianid); } package com.kucun.dataDo; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Dingdan_chanpin; //DingdanChanpinRepository.java @Repository public interface DingdanChanpinRepository extends JpaRepository<Dingdan_chanpin, Integer> { boolean existsByDingdan_IdAndChanpin_Id(Integer dingdanid, Integer chanpinid); List<Dingdan_chanpin> findByChanpin_Id(Integer id); } package com.kucun.dataDo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.kucun.data.entity.Chanpin; import com.kucun.data.entity.Dingdan_chanpin_zujian; //ChanpinRepository.java //DingdanChanpinZujianRepository.java @Repository public interface DingdanChanpinZujianRepository extends JpaRepository<Dingdan_chanpin_zujian, Integer> { boolean existsByDingdan_IdAndZujian_Id(Integer dingdanid, Integer chanpin_zujianid); } package com.kucun.data.entity; import java.util.Date; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToOne; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.IdOnlySerializer; @Entity public class Jinhuo implements EntityBasis{ @Id private Integer id; @ManyToOne @JsonSerialize(using = IdOnlySerializer.class) private Dingdan dingdan; @ManyToOne @JsonSerialize(using = IdOnlySerializer.class) private Chanpin chanpin; @ManyToOne @JsonSerialize(using = IdOnlySerializer.class) private Zujian zujian; @ManyToOne @JsonSerialize(using = IdOnlySerializer.class) private Bancai bancai; private Integer shuliang; private Date date; @ManyToOne @JsonSerialize(using = IdOnlySerializer.class) private User user; public Jinhuo(Integer id, Dingdan dingdan, Chanpin chanpin, Zujian zujian, Bancai bancai, Integer shuliang, Date date, User user) { super(); this.id = id; this.dingdan = dingdan; this.chanpin = chanpin; this.zujian = zujian; this.bancai = bancai; this.shuliang = shuliang; this.date = date; this.user = user; } public Jinhuo() { super(); // TODO Auto-generated constructor stub } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan getDingdan() { return dingdan; } public void setDingdan(Dingdan dingdan) { this.dingdan = dingdan; } public Chanpin getChanpin() { return chanpin; } public void setChanpin(Chanpin chanpin) { this.chanpin = chanpin; } public Zujian getZujian() { return zujian; } public void setZujian(Zujian zujian) { this.zujian = zujian; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } package com.kucun.data.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.IdOnlySerializer; /** * 库存 * @author Administrator * */ @Entity public class Kucun implements EntityBasis{ @Id private Integer id; private Long shuliang; @OneToOne(fetch = FetchType.LAZY) // 正确映射 Bancai 实体 @JoinColumn(name = "bancai_id", referencedColumnName = "id") @JsonSerialize(using = IdOnlySerializer.class) private Bancai bancai; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Long getShuliang() { return shuliang; } public void setShuliang(Long shuliang) { this.shuliang = shuliang; } public Kucun(Integer id, Bancai bancai, Long shuliang) { super(); this.id = id; this.bancai = bancai; this.shuliang = shuliang; } public Kucun() { super(); // TODO Auto-generated constructor stub } } package com.kucun.data.entity; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.IdOnlySerializer; /** * 木皮 * @author Administrator * */ @Entity @Table(name="caizhi", uniqueConstraints = { @UniqueConstraint(columnNames = "name") }) @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) public class Mupi extends SimpleEntity implements EntityBasis{ /** * 是否有油漆 */ private Boolean you; // 添加 OneToMany 映射 @OneToMany(mappedBy = "mupi1") // 指向 Bancai 中的 mupi1 字段 @JsonIgnore @JsonSerialize(contentUsing = IdOnlySerializer.class) private List<Bancai> bancaisForMupi1; @OneToMany(mappedBy = "mupi2") // 指向 Bancai 中的 mupi2 字段 @JsonIgnore @JsonSerialize(contentUsing = IdOnlySerializer.class) private List<Bancai> bancaisForMupi2; public List<Bancai> getBancaisForMupi1() { return bancaisForMupi1; } public void setBancaisForMupi1(List<Bancai> bancaisForMupi1) { this.bancaisForMupi1 = bancaisForMupi1; } public List<Bancai> getBancaisForMupi2() { return bancaisForMupi2; } public void setBancaisForMupi2(List<Bancai> bancaisForMupi2) { this.bancaisForMupi2 = bancaisForMupi2; } public Mupi() { super(); } public Boolean getYou() { return you; } public void setYou(Boolean you) { this.you = you; } } package com.kucun.data.entity; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class SimpleEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(nullable = false, unique = true) private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } // Getters and Setters... } package com.kucun.data.entity; import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import com.fasterxml.jackson.databind.ObjectMapper; /** * 用户 * @author Administrator * */ @Entity @Table(name="user") public class User implements EntityBasis{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; /** * 名字 */ @Column(nullable=false) private String name; /** * 账号 */ @Column(nullable=false) private String andy; /** * 密码 */ @Column(nullable=false) private String pass; /** * 权限 */ @Column(nullable=false) private int role; public User() { super(); } public User(int id, String name, String andy, String pass) { super(); this.id = id; this.name = name; this.andy = andy; this.pass = pass; } public Integer getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAndy() { return andy; } public void setAndy(String andy) { this.andy = andy; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public int getRole() { System.out.println(role); return role; } public void setRole(int role) { this.role = role; } @Override public String toString() { return "{id:" + id + ", name:" + name + ", andy:" + andy + ", pass:" + pass + ", role:" + role + "}"; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(andy, user.andy)&& Objects.equals(role, user.role); //添加所有属性比较 } @Override public int hashCode() { return Objects.hash(id, name, andy,pass,role); } } package com.kucun.data.entity; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.OneToMany; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.IdOnlySerializer; @Entity public class Zujian extends SimpleEntity implements EntityBasis{ // 反向关联到产品组件 @OneToMany( mappedBy = "zujian", cascade = CascadeType.ALL, fetch = FetchType.LAZY ) @JsonSerialize(contentUsing = IdOnlySerializer.class) private List<Chanpin_zujian> chanpins; public List<Chanpin_zujian> getChanpins() { return chanpins; } public void setChanpins(List<Chanpin_zujian> chanpins) { this.chanpins = chanpins; } } package com.kucun.data.entity; import java.lang.annotation.Annotation; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.persistence.Table; import com.kucun.data.entity.DTO.*; import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * 板材 * @author Administrator * */ @Entity @Table(name="bancai") public class Bancai implements EntityBasis { @Id private int id; @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "caizhi_id") // @JsonManagedReference // 标记为“主”关联方 @JsonSerialize(using = IdOnlySerializer.class) private Caizhi caizhi; @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "mupi1_id") @JsonSerialize(using = IdOnlySerializer.class) private Mupi mupi1; @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "mupi2_id") @JsonSerialize(using = IdOnlySerializer.class) private Mupi mupi2; private Double houdu; @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "kucun_id", referencedColumnName = "id") private Kucun kucun; public Kucun getKucun() { return kucun; } public void setKucun(Kucun kucun) { this.kucun = kucun; } public Integer getId() { return id; } public void setId(int id) { this.id = id; } public Caizhi getCaizhi() { return caizhi; } public void setCaizhi(Caizhi caizhi) { this.caizhi = caizhi; } public Mupi getMupi1() { return mupi1; } public void setMupi1(Mupi mupi1) { this.mupi1 = mupi1; } public Mupi getMupi2() { return mupi2; } public void setMupi2(Mupi mupi2) { this.mupi2 = mupi2; } public Double getHoudu() { return houdu; } public void setHoudu(Double houdu) { this.houdu = houdu; } public Bancai(int id, Caizhi caizhi, Mupi mupi1, Mupi mupi2, Double houdu) { super(); this.id = id; this.caizhi = caizhi; this.mupi1 = mupi1; this.mupi2 = mupi2; this.houdu = houdu; } public Bancai() { super(); } } package com.kucun.data.entity; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; /** * 板材材质 * @author Administrator * */ @Entity @Table(name="caizhi", uniqueConstraints = { @UniqueConstraint(columnNames = "name") }) @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) public class Caizhi extends SimpleEntity{ @OneToMany(mappedBy="caizhi") @JsonIgnore private List<Bancai> bancais; public Caizhi() { super(); } // 添加反向关联维护方法 public void addBancai(Bancai bancai) { bancais.add(bancai); bancai.setCaizhi(this); } // 添加移除方法 public void removeBancai(Bancai bancai) { bancais.remove(bancai); bancai.setCaizhi(null); } public List<Bancai> getBancais() { return bancais; } public void setBancais(List<Bancai> bancais) { this.bancais = bancais; } } package com.kucun.data.entity; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.IdOnlySerializer; /** * 产品类 * @author Administrator * */ @Entity @Table(name="chanpin", uniqueConstraints = { @UniqueConstraint(columnNames = "bianhao") }) public class Chanpin implements EntityBasis { @Id private Integer id; // 关联订单产品 @OneToMany( mappedBy = "chanpin", cascade = CascadeType.ALL, fetch = FetchType.LAZY ) @JsonSerialize(contentUsing = IdOnlySerializer.class) private List<Dingdan_chanpin> dingdans; private String bianhao; @OneToMany( mappedBy = "chanpin", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true ) @JsonSerialize(contentUsing = IdOnlySerializer.class) private List<Chanpin_zujian> zujians; // 添加/移除组件的辅助方法 public void addZujian(Chanpin_zujian zujian) { zujians.add(zujian); zujian.setChanpin(this); } public void removeZujian(Chanpin_zujian zujian) { zujians.remove(zujian); zujian.setChanpin(null); } // 添加/移除组件的辅助方法 public void addDingdan(Dingdan_chanpin dingdan) { dingdans.add(dingdan); dingdan.setChanpin(this); } public void removeDingdan(Dingdan_chanpin dingdian) { dingdans.remove(dingdian); dingdian.setChanpin(null); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public List<Dingdan_chanpin> getDingdans() { return dingdans; } public void setDingdans(List<Dingdan_chanpin> dingdans) { this.dingdans = dingdans; } public String getBianhao() { return bianhao; } public void setBianhao(String bianhao) { this.bianhao = bianhao; } public List<Chanpin_zujian> getZujians() { return zujians; } public void setZujians(List<Chanpin_zujian> zujians) { this.zujians = zujians; } public Chanpin(Integer id, List<Dingdan_chanpin> dingdians, String bianhao, List<Chanpin_zujian> zujians) { super(); this.id = id; this.dingdans = dingdians; this.bianhao = bianhao; this.zujians = zujians; } public Chanpin() { super(); // TODO Auto-generated constructor stub } } package com.kucun.data.entity; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.IdOnlySerializer; /** * 产品组件关联类 * @author Administrator * */ @Entity @Table(name="chanpin_zujian") public class Chanpin_zujian implements EntityBasis { @Id private Integer id; // 关联到产品 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chanpin_id") @JsonSerialize(using = IdOnlySerializer.class) private Chanpin chanpin; // 关联到组件 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "zujian_id") @JsonSerialize(using = IdOnlySerializer.class) private Zujian zujian; // 关联到板材 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "bancai_id") @JsonSerialize(using = IdOnlySerializer.class) private Bancai bancai; private Double one_howmany; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Chanpin getChanpin() { return chanpin; } public void setChanpin(Chanpin chanpin) { this.chanpin = chanpin; } public Zujian getZujian() { return zujian; } public void setZujian(Zujian zujian) { this.zujian = zujian; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Double getOne_howmany() { return one_howmany; } public void setOne_howmany(Double one_howmany) { this.one_howmany = one_howmany; } public Chanpin_zujian() { super(); // TODO Auto-generated constructor stub } } package com.kucun.data.entity; import java.util.Date; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.IdOnlySerializer; /** * 订单 * @author Administrator * */ @Entity @Table(name="dingdan", uniqueConstraints = { @UniqueConstraint(columnNames = "number") }) public class Dingdan implements EntityBasis{ @Id private Integer id; //订单号 private String number; private Date xiadan; private Date jiaohuo; @OneToMany( mappedBy = "dingdan", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true ) @JsonSerialize(contentUsing = IdOnlySerializer.class) private List<Dingdan_chanpin> dingdan_chanpins; // 优化订单与订单组件关联 @OneToMany( mappedBy = "dingdan", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true ) @JsonSerialize(contentUsing = IdOnlySerializer.class) private List<Dingdan_chanpin_zujian> dingdan_chanpins_zujians; public Date getXiadan() { return xiadan; } public void setXiadan(Date xiadan) { this.xiadan = xiadan; } public Date getJiaohuo() { return jiaohuo; } public void setJiaohuo(Date jiaohuo) { this.jiaohuo = jiaohuo; } public List<Dingdan_chanpin_zujian> getDingdan_chanpins_zujians() { return dingdan_chanpins_zujians; } public void setDingdan_chanpins_zujians(List<Dingdan_chanpin_zujian> dingdan_chanpins_zujians) { this.dingdan_chanpins_zujians = dingdan_chanpins_zujians; } public List<Dingdan_chanpin> getDingdan_chanpins() { return dingdan_chanpins; } public void setDingdan_chanpins(List<Dingdan_chanpin> dingdan_chanpins) { this.dingdan_chanpins = dingdan_chanpins; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Dingdan(Integer id, String number) { super(); this.id = id; this.number = number; } public Dingdan() { super(); // TODO Auto-generated constructor stub } } package com.kucun.data.entity; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.IdOnlySerializer; /** * 订单和产品关联 * @author Administrator * */ @Entity @Table(name="dingdan_chanpin") public class Dingdan_chanpin implements EntityBasis { @Id private Integer id; //产品信息 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dingdan_id") // 指 @JsonSerialize(using = IdOnlySerializer.class) private Dingdan dingdan; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chanpin_id") // 指 @JsonSerialize(using = IdOnlySerializer.class) private Chanpin chanpin; private Integer shuliang;//产品数量; public Chanpin getChanpin() { return chanpin; } public void setChanpin(Chanpin chanpin) { this.chanpin = chanpin; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan getDingdan() { return dingdan; } public void setDingdan(Dingdan dingdan) { this.dingdan = dingdan; } public Chanpin getChanping() { return chanpin; } public void setChanping(Chanpin chanping) { this.chanpin = chanping; } } package com.kucun.data.entity; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.IdOnlySerializer; /** * 一个订单中的产品组件订购板材数量 * @author Administrator * */ @Entity public class Dingdan_chanpin_zujian implements EntityBasis{ @Id private Integer id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dingdan_id") // 指定外键列 @JsonSerialize(using = IdOnlySerializer.class) private Dingdan dingdan; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chanpin_zujian_id") // 指定外键列 @JsonSerialize(using = IdOnlySerializer.class) private Chanpin_zujian zujian; // 修改为单数形式 //板材 @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "bancai_id") @JsonSerialize(using = IdOnlySerializer.class) private Bancai bancai; //订购数 private Integer shuliang ; public Dingdan_chanpin_zujian() { super(); // TODO Auto-generated constructor stub } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan getDingdan() { return dingdan; } public void setDingdan(Dingdan dingdan) { this.dingdan = dingdan; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Chanpin_zujian getZujian() { return zujian; } public void setZujian(Chanpin_zujian zujian) { this.zujian = zujian; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } } package com.kucun.data.entity; public interface EntityBasis { Integer getId(); } package com.kucun.data.entity; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; /** * 通信类 * @author Administrator * */ public class Information { private static final ObjectMapper mapper = new ObjectMapper(); private Integer Status ; private String text; private Object data; public Integer getStatus() { return Status; } public void setStatus(Integer status) { Status = status; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Information(Integer status, String text, Object data) { super(); Status = status; this.text = text; this.data = data; } @SuppressWarnings({"unchecked","rawtypes"}) public Information(Integer status, String text, String data, Class T) throws Exception { super(); Status = status; this.text = text; this.data = fromJson(data,T); } public Information() { super(); // TODO Auto-generated constructor stub } public String DataJson() throws JsonProcessingException { // Java对象转JSON return mapper.writeValueAsString(this); } @SuppressWarnings("unchecked") public <T> T fromJson(String json, Class<T> clazz) throws Exception { data= mapper.readValue(json, clazz); return (T) data; } public static Information NewSuccess(Object data) { return new Information(200, "success", data); } public static Information NewSuccess(String data) { return new Information(200, "success", data); } public static Information Newfail(Integer status,String text,Object data) { return new Information(status, "success", data); } } package com.kucun.data.entity.DTO; import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.module.SimpleModule; import com.kucun.data.entity.EntityBasis; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JacksonConfig { @Bean public Module idOnlyModule() { SimpleModule module = new SimpleModule(); module.addSerializer(EntityBasis.class, new IdOnlySerializer()); return module; } } package com.kucun.data.entity.DTO; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.kucun.data.entity.EntityBasis; import java.io.IOException; public class IdOnlySerializer extends JsonSerializer<EntityBasis> { @Override public void serialize(EntityBasis entity, JsonGenerator gen, SerializerProvider provider) throws IOException { if (entity == null) { gen.writeNull(); } else { gen.writeStartObject(); gen.writeNumberField("id", entity.getId()); gen.writeEndObject(); } } } /** *1输出所有实体类 * @return */ @GetMapping("/alle") public Map<String, Object> getAllDataWithChildIdse() { Map<String, Object> response = new HashMap<>(); response.put("caizhis", (caizhiRepository.findAll())); response.put("bancais", (bancaiRepository.findAll())); response.put("chanpins", (chanpinRepository.findAll())); response.put("dingdans", (dingdanRepository.findAll())); response.put("mupis", (mupiRepository.findAll())); response.put("zujians", (zujianRepository.findAll())); response.put("kucuns", (kucunRepository.findAll())); response.put("users", (userRepository.findAll())); response.put("chanpin_zujians", (chanpinZujianRepository.findAll())); response.put("chanpin_zujians", (dingdanChanpinZujianRepository.findAll())); response.put("chanpin_zujians", (dingdanChanpinRepository.findAll())); return response; } 输出:{"bancais":[{"id":1},{"id":2}],"dingdans":[{"id":1}],"mupis":[{"id":1},{"id":2},{"id":3}],"chanpins":[{"id":1}],"kucuns":[{"id":1},{"id":2}],"chanpin_zujians":[{"id":1}],"zujians":[{"id":1}],"caizhis":[{"id":1,"name":"千和板"},{"id":3,"name":"杉木"},{"id":2,"name":"桃花芯"}],"users":[{"id":1}]} 我需要的是实体类中的下级类 只剩下id一个字段,不是全部
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值