我有一个带有助手列的用户实体。

每个用户都有一个助手,但也有圈子。


例如:用户A的助手是用户B,用户B的助手是
用户A。


如果我使用@ManyToOne和@OneToMany批注,那么在将对象转换为JSON时,即使@JsonManagedReference和
@JsonBackReference没有帮助。

BaseEntity:

@MappedSuperclass
@Data
public class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long id;

    @Version
    private int version;
}


用户:

@Entity
@AllArgsConstructor
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@Table(name = "Users")
public class User extends BaseEntity {

    @Column
    private String username;

    @Column
    private String name;

    @JsonManagedReference
    @ManyToOne
    @JoinColumn(name = "assistant_id")
    private User assistant;

    @JsonBackReference
    @OneToMany(mappedBy = "assistant")
    private Set<User> assistants;


}


Spring是否有解决此问题的机会?

最佳答案

@JsonManagedReference/@JsonBackReference将无济于事,因为即使未对“反向”引用进行序列化,“正向”引用仍然可以形成一个循环。

您想要的可能是分配给User属性的assistant要序列化而没有它自己的assistant属性(这样任何循环都会中断)。本质上,除了AB是同一类之外,您与here的问题相同。

除了我链接到的问题中描述的解决方案之外,您还需要指定序列化对象时要使用的@JsonView。请参见“在Spring中使用JSON视图”部分here

07-24 20:45