JPA:如何创建自联接实体?

时间:2019-09-19 16:36:03

标签: java spring jpa

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

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

  

例如:用户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是否有解决此问题的机会?

2 个答案:

答案 0 :(得分:0)

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

您想要的可能是 ,因为分配给User属性的assistant将被序列化而没有自己的 assistant属性(以便任何周期中断)。本质上,除了AB是同一类之外,您与here的问题相同。

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

答案 1 :(得分:0)

您可以基于同一张表创建助手实体并加入吗?