gpt4 book ai didi

java - 使用 QueryDsl/Hibernate 进行延迟加载不起作用

转载 作者:行者123 更新时间:2023-12-01 09:49:40 25 4
gpt4 key购买 nike

/** 父实体 **/

@Entity

@Table(name = "Parent")

public class Parent {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "parentId", unique = true, nullable = false)
private Integer parentId;


@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
@JsonManagedReference
private Set<Child> childs = new HashSet<Child>(0);

}

*****子实体*****

@Entity

@Table(name = "Child")

public class Child {

private static final long serialVersionUID = 1L;

@ManyToOne(fetch = FetchType.LAZY, targetEntity = Parent.class)
@JoinColumn(name = "GuestID")
@JsonBackReference
private Parent parent;

}

当我尝试检索父级详细信息时,它还会获取子记录,这不应该发生,因为我提供了 FetchType.LAZY。

************ DAO 类 ******

public class ParentRepositoryImpl implements ParentRepository {

public final List<Parent> retrieveParentList(){

QParent qParent = QParent.parent;
JPQLQuery<Parent> query = new JPAQuery<Parent>(em);
List<Parent> parents = query.from(qParent).fetch();
}
}

另外,我想有条件(根据请求)获取子记录,我怎样才能实现这一点?

最佳答案

经过一些研究后,我在下面找到了必要的解决办法,

实际上,REST API 需要序列化数据并通过网络发送。就我而言,我使用 Jackson 将 Java 对象序列化为 JSON 格式。默认情况下,Jackson ObjectMapper 不了解 Hibernate 及其延迟加载方案。在序列化过程中,Jackson 接触了实体上的所有属性,这导致 Hibernate 获取所有数据,从而失去了延迟加载带来的好处。

为了避免这种情况,我们需要实现 jackson-module-hibernate

“该模块支持 Hibernate 特定数据类型和属性的 JSON 序列化和反序列化;特别是延迟加载方面。”添加此模块后,Jackson 不再尝试序列化延迟加载集合。

关于java - 使用 QueryDsl/Hibernate 进行延迟加载不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37681314/

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