我在使用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请求时,我得到以下输出:
就像这个嵌套对象的5000行。怎么会来?
最诚挚的问候!
答案 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;
但是同时执行这两个操作并不是一个好主意,因为这样一来您在请求中将看不到任何内容。