java - 双向 JPA 映射时 Spring REST 返回递归 JSON

标签 java hibernate jpa recursion fetch

我创建了一个带有两个表的双向 JPA 一对多映射。双方都添加了惰性获取。当我调用获取数据的一侧时,持久层返回一个没有关系的正确结果集。 但是当通过 REST API 获取这些数据时,它会返回一个长 JSON 对象。 (递归数据)。

Java 8、Spring boot、Spring Data 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) 确保所有实体都实现 equalshashCode

2) 如果您从拍卖查询到出价,那么您可以忽略拍卖:

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

根据我的经验,将 hibernate 代理直接传递给 Jackson 进行解析,只会引发很多类似的问题。您可能需要考虑某种带有映射器层的 DTO。只是建议,决定权在你自己。

关于java - 双向 JPA 映射时 Spring REST 返回递归 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56088449/

相关文章:

java - 在 Java 中打印变量值

java - org.apache.openjpa.persistence.InvalidStateException : This broker is not configured to use managed transactions

java - 在 CriteriaQuery 中使用静态元模型的 ListAttribute 类型的字段

java - JPA - 用于测试的不同 id 生成策略

java - 如何知道我是否在 Android 上通话?

java - StreamingResponseBody 返回空文件

java - 不使用 split(String regex) 方法拆分字符串数组

java - @Embedded List 对象 Hibernate

java - 如何命名自 JPA 2.1 以来的 ManyToOne 引用的外键约束?

oracle - 无法从结果集中读取列值