首页 > 解决方案 > Rest Api 不显示关系数据

问题描述

我正在尝试使用 spring boot 和 spring data jpa 显示数据多对一的双向映射。请看下面的实体:

TinTuc 实体

@ Entity
@ NamedQuery(name="Tintuc.findAll", query="SELECT t FROM Tintuc t")
@ JsonIgnoreProperties({"hibernatelazyinitializer", "handler"})
public class Tintuc {
//  private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="ID_TIN_TUC")
    private int idTinTuc;

    @Lob
    @Column(name="HINH_ANH_TIN_TUC")
    private String hinhAnhTinTuc;

    @Column(name="NGAY_DANG")
    private String ngayDang;

    @Column(name="NOI_DUNG_MO_TA")
    private String noiDungMoTa;

    @Lob
    @Column(name="NOI_DUNG_TIN_TUC")
    private String noiDungTinTuc;

    @Column(name="TIEU_DE_TIN_TUC")
    private String tieuDeTinTuc;

    @Column(name="TRANG_THAI")
    private int trangThai;

    //bi-directional many-to-one association to Nguoidung
    @JsonBackReference
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="ID_NGUOI_DUNG")
    private Nguoidung nguoidung;

    //bi-directional many-to-one association to Loaitintuc
    @JsonBackReference
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="ID_LOAI_TIN_TUC")
    private Loaitintuc loaitintuc;

    public Tintuc() {
    }

    public int getIdTinTuc() {
        return this.idTinTuc;
    }

    public void setIdTinTuc(int idTinTuc) {
        this.idTinTuc = idTinTuc;
    }

    public String getHinhAnhTinTuc() {
        return this.hinhAnhTinTuc;
    }

    public void setHinhAnhTinTuc(String hinhAnhTinTuc) {
        this.hinhAnhTinTuc = hinhAnhTinTuc;
    }

    public String getNgayDang() {
        return this.ngayDang;
    }

    public void setNgayDang(String ngayDang) {
        this.ngayDang = ngayDang;
    }

    public String getNoiDungMoTa() {
        return this.noiDungMoTa;
    }

    public void setNoiDungMoTa(String noiDungMoTa) {
        this.noiDungMoTa = noiDungMoTa;
    }

    public String getNoiDungTinTuc() {
        return this.noiDungTinTuc;
    }

    public void setNoiDungTinTuc(String noiDungTinTuc) {
        this.noiDungTinTuc = noiDungTinTuc;
    }

    public String getTieuDeTinTuc() {
        return this.tieuDeTinTuc;
    }

    public void setTieuDeTinTuc(String tieuDeTinTuc) {
        this.tieuDeTinTuc = tieuDeTinTuc;
    }

    public int getTrangThai() {
        return this.trangThai;
    }

    public void setTrangThai(int trangThai) {
        this.trangThai = trangThai;
    }

    public Nguoidung getNguoidung() {
        return this.nguoidung;
    }

    public void setNguoidung(Nguoidung nguoidung) {
        this.nguoidung = nguoidung;
    }

    public Loaitintuc getLoaitintuc() {
        return this.loaitintuc;
    }

    public void setLoaitintuc(Loaitintuc loaitintuc) {
        this.loaitintuc = loaitintuc;
    }
}

LoaiTinTuc 实体

@Entity
@NamedQuery(name="Loaitintuc.findAll", query="SELECT l FROM Loaitintuc l")
@JsonIgnoreProperties({"hibernatelazyinitializer", "handler"})
public class Loaitintuc {
//  private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="ID_LOAI_TIN_TUC")
    private int idLoaiTinTuc;

    @Column(name="ID_LOAI_TIN_TUC_CHA")
    private int idLoaiTinTucCha;

    @Column(name="TEN_LOAI_TIN_TUC")
    private String tenLoaiTinTuc;

    //bi-directional many-to-one association to Tintuc
    @JsonManagedReference
    @OneToMany(fetch = FetchType.LAZY,mappedBy="loaitintuc")
    private List<Tintuc> tintucs;

    public Loaitintuc() {
    }

    public int getIdLoaiTinTuc() {
        return this.idLoaiTinTuc;
    }

    public void setIdLoaiTinTuc(int idLoaiTinTuc) {
        this.idLoaiTinTuc = idLoaiTinTuc;
    }

    public int getIdLoaiTinTucCha() {
        return this.idLoaiTinTucCha;
    }

    public void setIdLoaiTinTucCha(int idLoaiTinTucCha) {
        this.idLoaiTinTucCha = idLoaiTinTucCha;
    }

    public String getTenLoaiTinTuc() {
        return this.tenLoaiTinTuc;
    }

    public void setTenLoaiTinTuc(String tenLoaiTinTuc) {
        this.tenLoaiTinTuc = tenLoaiTinTuc;
    }

    public List<Tintuc> getTintucs() {
        return this.tintucs;
    }

    public void setTintucs(List<Tintuc> tintucs) {
        this.tintucs = tintucs;
    }

    public Tintuc addTintuc(Tintuc tintuc) {
        getTintucs().add(tintuc);
        tintuc.setLoaitintuc(this);

        return tintuc;
    }

    public Tintuc removeTintuc(Tintuc tintuc) {
        getTintucs().remove(tintuc);
        tintuc.setLoaitintuc(null);

        return tintuc;
    }
}

NguoiDung 实体

@Entity
@NamedQuery(name="Nguoidung.findAll", query="SELECT n FROM Nguoidung n")
@JsonIgnoreProperties({"hibernatelazyinitializer", "handler"})
public class Nguoidung {
//  private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="ID_NGUOI_DUNG")
    private int idNguoiDung;

    @Column(name="DIA_CHI")
    private String diaChi;

    private String email;

    @Lob
    private String img;

    @Column(name="MAT_KHAU")
    private String matKhau;

    private int quyen;

    @Column(name="SO_DIEN_THOAI")
    private int soDienThoai;

    private String ten;

    //bi-directional many-to-one association to Binhluan
    @JsonManagedReference
    @OneToMany(fetch = FetchType.LAZY,mappedBy="nguoidung")
    private List<Binhluan> binhluans;

    //bi-directional many-to-one association to Tintuc
    @JsonManagedReference
    @OneToMany(fetch = FetchType.LAZY,mappedBy="nguoidung")
    private List<Tintuc> tintucs;

    public Nguoidung() {
    }

    public int getIdNguoiDung() {
        return this.idNguoiDung;
    }

    public void setIdNguoiDung(int idNguoiDung) {
        this.idNguoiDung = idNguoiDung;
    }

    public String getDiaChi() {
        return this.diaChi;
    }

    public void setDiaChi(String diaChi) {
        this.diaChi = diaChi;
    }

    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getImg() {
        return this.img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public String getMatKhau() {
        return this.matKhau;
    }

    public void setMatKhau(String matKhau) {
        this.matKhau = matKhau;
    }

    public int getQuyen() {
        return this.quyen;
    }

    public void setQuyen(int quyen) {
        this.quyen = quyen;
    }

    public int getSoDienThoai() {
        return this.soDienThoai;
    }

    public void setSoDienThoai(int soDienThoai) {
        this.soDienThoai = soDienThoai;
    }

    public String getTen() {
        return this.ten;
    }

    public void setTen(String ten) {
        this.ten = ten;
    }

    public List<Binhluan> getBinhluans() {
        return this.binhluans;
    }

    public void setBinhluans(List<Binhluan> binhluans) {
        this.binhluans = binhluans;
    }

    public Binhluan addBinhluan(Binhluan binhluan) {
        getBinhluans().add(binhluan);
        binhluan.setNguoidung(this);

        return binhluan;
    }

    public Binhluan removeBinhluan(Binhluan binhluan) {
        getBinhluans().remove(binhluan);
        binhluan.setNguoidung(null);

        return binhluan;
    }

    public List<Tintuc> getTintucs() {
        return this.tintucs;
    }

    public void setTintucs(List<Tintuc> tintucs) {
        this.tintucs = tintucs;
    }

    public Tintuc addTintuc(Tintuc tintuc) {
        getTintucs().add(tintuc);
        tintuc.setNguoidung(this);

        return tintuc;
    }

    public Tintuc removeTintuc(Tintuc tintuc) {
        getTintucs().remove(tintuc);
        tintuc.setNguoidung(null);

        return tintuc;
    }

}

休息控制器

@GetMapping
    public List<Tintuc> getAllList(){
        return tinTucService.getAllList(1);
    }

现在问题开始了,看看我的输出,它不显示来自 NguoiDung 或 LoaiTinTuc 的数据:

在此处输入图像描述

我需要输出:

{
   "idTinTuc": 1,
   "hinhAnhTinTuc":"1.jpg",
    ....
   "LoaiTinTuc":[
     {"id":1,
       "tenLoaiTinTuc":"tin hot"},
    ....
   ]
   "NguoiDung":
   [
     {id: "1", 
      ten:"name",
   ...
   ]
}  

请向我建议我做错了什么。提前致谢!!

标签: javarestapispring-boot

解决方案


这是因为您的实体类上有 @JsonIgnoreProperties({"hibernatelazyinitializer", "handler"}) 并且您的多对一映射是延迟获取类型。尝试删除其中之一。

将 TinTuc 中的 @JsonBackReference 更改为 @JsonManagedReference。在您的子实体中将您的 @JsonManagedReference 更改为 @JsonBackReference。


推荐阅读