如何序列化延迟获取的hibernate字段作为参考?

时间:2017-11-02 11:46:12

标签: hibernate jackson spring-data-jpa lazy-loading

使用Jackson和Hibernate,我有一些懒惰的字段。我想让它们用它的id表示(类似于@JsonIdentityReference的效果),而不是嵌入整个对象或者为null。

但是,我只能达到以下效果:

  1. 使用Jackson-datatype-hibernate时,延迟获取的字段被序列化为null,而我需要参考。
  2. 使用@JsonIdentityReference,并将fetchType更改为eager,我将字段序列化为id(引用)。然而,这个领域是急切的,这是性能的一个缺点。
  3. 我想拥有具有以上两种情况优势的解决方案:该字段是延迟获取的,因此除非需要,否则无需查询数据库。生成的Json对象中包含一个id引用,因此客户端可以发出单独的查询以获取带引用的实体。

    我的意图类似于spring数据休息所做的事情:同一聚合根中的实体嵌入在聚合根中。与其他聚合根的关系表示为链接。

    提前致谢!

2 个答案:

答案 0 :(得分:2)

除了HibernateModule之外,您是否尝试将FORCE_LAZY_LOADING的此功能设为false?:

hibernateModule.configure(Feature.FORCE_LAZY_LOADING, false); 
hibernateModule.configure(Feature.SERIALIZE_IDENTIFIER_FOR_LAZY_NOT_LOADED_OBJECTS, true);

未初始化代理的输出如下:

{
    "somefield" : "value",
    "link": {
        "id" = idValue
    }
}

答案 1 :(得分:0)

我认为你可以扩展VectorKitHibernate5Module)并自己添加Hibernate4Module。 从代理

获取id
id