【问题标题】:@jsonbackreference doesn't bind relationship@jsonbackreference 不绑定关系
【发布时间】:2016-04-12 07:50:00
【问题描述】:

我有两个班级:

Person.java:

@Entity
@PrimaryKeyJoinColumn(name="owner_id")
public class Person extends Owner {

    @ManyToOne
    @JoinColumn(name = "car_sharing_id")
    @JsonBackReference
    private CarSharing carSharing;
}

CarSharing.java:

@Entity
public class CarSharing extends MetadataEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne
    @JoinColumn(name = "owner_id", nullable = false)
    @NotNull
    private Person owner;

    @OneToMany(mappedBy = "carSharing", cascade = CascadeType.ALL)
    @Valid
    private Set<Person> members;
}

我使用@JsonBackReference 来避免无限循环。 CarSharing 类工作正常,问题只发生在 Person 类。

获取此人似乎忽略了carSharing 属性。因为它是null,当返回服务器时,更新将取消对person 表中carsharing_id 的引用。

停止循环很好,但我还需要Person 类中的carSharing

知道如何解决这个问题吗?

【问题讨论】:

    标签: java hibernate jackson


    【解决方案1】:

    如果您使用的是 Jackson 2.x,则可以使用注解 @JsonIdentityInfo

    是否使用对象标识信息来确定如何将属性值序列化/反序列化到 JSON(和其他数据格式)将基于 @JsonIdentityInfo 注释的存在(或缺失)。
    见:http://wiki.fasterxml.com/JacksonFeatureObjectIdentity

    例如,如果您注释类CarSharing

    import com.fasterxml.jackson.annotation.JsonIdentityInfo;
    import com.fasterxml.jackson.annotation.ObjectIdGenerators;
    //...
    @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
    public class CarSharing {
    

    一个人的JSON结果(我给这个类加了一个字段名)是:

      {
        "carSharing": {
          "@id": 1,
          "id": 12345,
          "owner": {
            "carSharing": 1,
            "name": "owner"
          },
          "members": [
            {
              "carSharing": 1,
              "name": "owner"
            },
            {
              "carSharing": 1,
              "name": "driver2"
            },
            {
              "carSharing": 1,
              "name": "driver"
            }
          ]
        },
        "name": "driver2"
      }
    

    还有一个带有 id=12345 的 CarSharing 实例:

      {
        "@id": 1,
        "id": 12345,
        "owner": {
          "carSharing": 1,
          "name": "owner"
        },
        "members": [
          {
            "carSharing": 1,
            "name": "owner"
          },
          {
            "carSharing": 1,
            "name": "driver2"
          },
          {
            "carSharing": 1,
            "name": "driver"
          }
        ]
      }
    

    @id 字段由 jackson 生成。如果被引用的对象没有被序列化,则值被设置为被引用对象的@id

    【讨论】:

      猜你喜欢
      • 2020-04-23
      • 1970-01-01
      • 2015-09-27
      • 2017-07-11
      • 2013-02-11
      • 2018-01-18
      • 2015-07-18
      • 2011-10-06
      • 1970-01-01
      相关资源
      最近更新 更多