我在使用JPA从mssql的关系表中获取数据时遇到问题

时间:2019-07-26 14:54:27

标签: java sql-server spring jpa

我在使用JPA从关系表中获取数据时遇到问题。我相信我的问题是我对注释的使用。我对此很陌生,希望能提供一些指导。

在此之前,我遇到了一些问题,现在我真的想学习 图片实体

@Entity
        @Table(name = "Picture")
        public class Picture {

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

        @Column(name = "path")
        @NotNull

        private String path;
        @ManyToOne
        @JoinColumn(name = "portfolio_id", nullable = false)
        private Portfolio portfolio;

and getters, setters.

投资组合实体

        @Entity
        @Table(name = "Portfolio")
        public class Portfolio {

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

        @Column(name = "Address")
        @NotNull
        private String address;

        @Column(name = "Description")
        @NotNull
        private String description;

        @Column(name = "Service")
        @NotNull
        private String service;

        @OneToMany(mappedBy = "portfolio")
        private Set<Picture> pictures;

在投资组合表中,我有这个对象

id        address                 description         service
2         Köpenhamnsvägen 33B     some desc           Full-Staging

在“图片”表中我有这个对象

id        path                 portfolio_id
1         https://bild.se                 2

当我执行一个触发仓库信息的简单get请求时,我得到以下输出:

Nested object of get request

就像这个嵌套对象的5000行。怎么会来?

最诚挚的问候!

1 个答案:

答案 0 :(得分:0)

这是因为您具有双向映射,因此涉及递归。 要解决此问题,只需尝试添加@XmlTransient(JAX-B)或@ JsonbTransient / @ JsonIgnore(Jackson) 到其中一个领域。这将使其在后端/ RESTful服务器的JSON表示中“不可见”。

@ManyToOne
@JoinColumn(name = "portfolio_id", nullable = false)
@XmlTransient/@JsonbTransient/@JsonIgnore (try all 3 annotations, since I dont know what implemantation of JAX-RS you are using
private Portfolio portfolio;

或者您可以为Set做它:

@OneToMany(mappedBy = "portfolio")
@XmlTransient/@JsonbTransient/@JsonIgnore //again: try them out, I don't know your implementation
private Set<Picture> pictures;

但是同时执行这两个操作并不是一个好主意,因为这样一来您在请求中将看不到任何内容。