首页 > 解决方案 > Spring Data JPA @OneToMany JSON响应与父级不返回第二个实例的父级

问题描述

我在 Spring Data JPA 中有两个实体,定义为 USER 和 USER_ACTIVITY,关系为:每个用户都有很多活动。

在我定义为的用户实体上

@Entity
@Getter
@Setter
@Table(name="user")
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="id")
public class User {
   @Id
   @GeneratedValue(strategy=GenerationType.IDENTITY)
   @Column(name="user_id")
   private long id;

   @JsonIgnore
   @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "user")
   private List<UserActivity> userActivities;
}

我的子实体用户活动被定义为

  @Entity
  @Getter
  @Setter
  @Table(name="user_activity")
  @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="id")
  public class UserActivity {

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

     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "user_id")
     private User user;
   }

我的活动存储库定义为

  @Repository
  public interface UserActivityRepository extends JpaRepository<UserActivity, Long> {
      public List<UserActivity> findByActivityDateAndTypeAndUserId(Date dt, String type, 
                   long id);
   }

当我在 repo 上使用 findByActivityDateAndTypeAndUserId 方法时,我注意到第二个实例的 JSON 响应不返回父级。但是作为用户信息的第一个活动。不知何故,响应截断了数组第二条记录中的父对象。这是相同的响应。

0: {
    id: 31
    activityDate: "2020-01-29"
    start: "2020-01-29T20:34:54.000-0500"
    end: "2020-01-29T20:34:54.000-0500"
    type: "CHECK_IN"
    notes: "CHECK_IN"
    user: {id: 92, username: "xyz@gmail.com", firstName: "x", y: "m",…}
1: {
    id: 32
    activityDate: "2020-01-29"
    start: "2020-01-29T20:34:55.000-0500"
    end: "2020-01-29T20:34:55.000-0500"
    type: "CHECK_OUT"
    notes: "CHECK_OUT"
    user: 2
    } 

请参阅用户字段数组中的第二项,这就是问题所在。任何帮助都非常感谢。谢谢你!

标签: jsonspringspring-bootjpajackson

解决方案


推荐阅读