首页 > 解决方案 > JPA ManyToOne/OneToMany 双向获取重复数据

问题描述

我正在使用 Spring 2.1 构建一个 REST API,并且我正在获取重复数据以咨询 ManyToOne 关系。

当地:

@Entity
@Table(name = "localidad")
public class Localidad implements Serializable {

    private static final long serialVersionUID = -7258462202419598287L;

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

    private String nombreLocalidad;

    private BigDecimal precioEnvio;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "provinciaIdProvincia")
    private Provincia provincia;

    public Localidad() {}

    public Localidad(String nombreLocalidad, BigDecimal precioEnvio) {
        this.nombreLocalidad = nombreLocalidad;
        this.precioEnvio = precioEnvio;
    }
...

省:

@Entity
@Table(name = "provincia")
public class Provincia implements Serializable {

    private static final long serialVersionUID = 3324427184301992595L;

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

    private String nombreProvincia;

    @OneToMany(mappedBy= "provincia", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<Localidad> localidades = new HashSet<Localidad>();

    public Provincia() {}

    public Provincia(String nombreProvincia) {
        this.nombreProvincia = nombreProvincia;
    }
...

我通过实现 CrudRepository 和 Service @Autowired 来访问信息

重复数据 HTTP GET 请求:

重复数据

谢谢

标签: javaspring-bootjpa

解决方案


该问题是由杰克逊对provincialocalidades字段进行循环序列化引起的。这可以通过使用@JsonIgnoreProperties注解来解决。所以在Localidad类或实体中添加注释如下:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "provinciaIdProvincia")
@JsonIgnoreProperties("localidades")
private Provincia provincia;

Provincia类中修改Set<Localidad>(顺便说一句,您可以使用 aList<Localidad>代替),如下所示:

@OneToMany(mappedBy= "provincia", cascade = CascadeType.ALL, fetch = 
FetchType.LAZY)
@JsonIgnoreProperties("provincia")
private Set<Localidad> localidades = new HashSet<Localidad>();

通过此更改,您的 Rest API 现在应该不会显示重复项。您必须忽略定义两个类或实体之间关联的字段。如果您曾经@JsonProperty定义字段名称,请使用定义中使用的@JsonProperty名称 @JsonIgnoreProperties


推荐阅读