Java 双向JPA映射时,SpringREST返回递归JSON

Java 双向JPA映射时,SpringREST返回递归JSON,java,hibernate,jpa,recursion,fetch,Java,Hibernate,Jpa,Recursion,Fetch,我用两个表创建了一个双向JPA一对多映射。两边都增加了懒散的抓取。当我调用获取数据的一侧时,持久层返回一个没有关系的正确结果集。 但当通过RESTAPI获取这些数据时,它会返回一个长JSON对象。递归数据 Java8,Spring引导,Spring数据JPA @Entity @Table(name = "t_auction") public class Auction { @Id @GeneratedValue(strategy = GenerationType.IDENTI

我用两个表创建了一个双向JPA一对多映射。两边都增加了懒散的抓取。当我调用获取数据的一侧时,持久层返回一个没有关系的正确结果集。 但当通过RESTAPI获取这些数据时,它会返回一个长JSON对象。递归数据

Java8,Spring引导,Spring数据JPA


@Entity
@Table(name = "t_auction")
public class Auction {

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

    @Column(name = "auction_name")
    private String tenderName;

    @OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL, mappedBy = "tender")
    private Set<Bid> bids;

}

`` Bidding Entity ---------------

@Entity
@Table(name = "t_bid")
public class Bid {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "bid_date")
    private Date bidDate;

    @ManyToOne(fetch = FetchType.LAZY,optional = false)
    @JoinColumn(name = "tender_join_id")
    private Tender tender;
}

`` Service Class ------------

public ResponseDto loadTenders(Tender tender) {
        ResponseDto responseDto = new ResponseDto();
        responseDto.setResponseItems(tenderRepository.findAll()); 
        return responseDto; // returns long JSON
    }

The actual result was a long JSON object.
The expected result is, Only requested entity without any mapped entities.
1确保所有实体都实现equals和hashCode

2如果您正在从拍卖到出价进行查询,则可以忽略拍卖:

根据我的经验,将hibernate代理直接传递给Jackson来解析,会引发很多类似的问题。您可能需要考虑使用mappers图层进行某种DTO。只是一个建议,决定权在你

@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "tender_join_id")
private Auction auction;