gpt4 book ai didi

java - 与 JsonBackReference 和 JsonManagedReference 的两种关系

转载 作者:行者123 更新时间:2023-11-30 07:05:08 26 4
gpt4 key购买 nike

回答

我将解决有关此博客的问题 Jackson – Bidirectional Relationships

谢谢你。

更新2

问题与 JsonBackReferenceJsonManagedReference 注释有关。对于我的两种关系,我必须使用 JsonBackReference 和 JsonManagedReference 显式选择一种序列化方式。但在这里,我以防万一使用相反的方式“Parent->Child”来满足特定的要求(默认使用“Child->Parent”方式)当我反转这两个注释时,我的 JSON 就是我正在寻找的特殊要求。关于如何在双向关系中使用 JACKSON 有什么想法吗?

谢谢。

更新1

这是一个使用EntityGraph的简单代码(感谢@NeilStockton建议),但仍然没有序列化JSON中的惰性属性:-(

父级

@Entity
public class Parent {
@Id
@GeneratedValue
private Long id;

@column
private String parentAttribute;

@OneToOne(mappedBy = "parent", optional = false)
@JsonBackReference
private Child child;

child

@Entity
public class Child {
@Id
@GeneratedValue
private Long id;

@column
private String childAttribute;

@OneToOne(optional = false, cascade = CascadeType.ALL)
@JsonManagedReference
private Parent parent;

父存储库

public interface ParentRepository extends CrudRepository<Parent> {

@EntityGraph(attributePaths = { "child" })
//a hack to use findAll with default lazy/eager mapping
Collection<Parent> findByIdNotNull();
}

生成的查询:

Hibernate: 
select
parent0_.id as id1_33_0_,
child1_.id as id1_32_1_,
parent0_.parent_attribute as parent_attribute2_33_0_,
child1_.child_attribute as child_attribute2_32_1_,
from
test.parent parent0_
left outer join
test.child child1_
on parent0_.id=child1_.parent_id
where
parent0_.id is not null

JSON(无子项):

   [ {
"id": 1
"parentAttribute": "I am the parent"
} ]

关于如何强制 Jackson Hibernate4Module 序列化(如果存在)有什么想法吗?谢谢。

我有一个 Spring Boot 1.3.1 后台,使用 JPA/hibernate 来映射实体。前端是 Angular2 应用程序。通信是 REST/JSON。我的问题是当我有惰性关系时在某些查询中强制急切加载。solution using JOIN FETCH在 DAO 层(存储库)方面帮助了我。 实体现在已完全加载到单个查询中,正如我在 Controller 层中所希望的那样但是由于 Hibernate4Module 的原因,序列化的 JSON 仍然不完整

波纹管 Hibernate4Module 功能无济于事:-(

  • FORCE_LAZY_LOADING
  • USE_TRANSIENT_ANNOTATION
  • SERIALIZE_IDENTIFIER_FOR_LAZY_NOT_LOADED_OBJECTS
  • REQUIRE_EXPLICIT_LAZY_LOADING_MARKER
  • REPLACE_PERSISTENT_COLLECTIONS

欢迎任何想法。谢谢。

最佳答案

最后,我通过在查询的选择部分中使用带有构造函数的自定义投影解决了我的问题。在新的投影类中,没有“JsonIgnore”或任何使字段不被 Jackson 序列化的 JPA 注释。我在该投影中添加了更多数据以供使用。希望它会有所帮助。

关于java - 与 JsonBackReference 和 JsonManagedReference 的两种关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40268465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com