首页 > 解决方案 > 无法延迟加载 JPA 关系

问题描述

我正在与 Jhipster 合作。我无法懒惰地吸引客户。

我做了一个这样的JDL......

 PROPERTY
 id
 ...

 CUSTOMER
 id
 ...

 CUSTOMER_PROPERTY
 id
 customer_id
 property_id
 value

 relationship OneToMany {
    Customer to CustomerProperty                    
 }
 relationship ManyToOne {
    CustomerProperty to Property    
 }

我的域名

客户.java

 @OneToMany(mappedBy = "customer", fetch = FetchType.LAZY)
 @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
 private Set<CustomerProperty> customerProperties = new HashSet<>();

Property.java 没有映射

客户属性.java

 @ManyToOne
 private Property property;

 @ManyToOne
 @JsonIgnoreProperties("customerProperties")
 private Customer customer;

我已经尝试显式设置 fetch = FetchType.LAZY 但它不断将完整的 Customer 对象与所​​有 CustomerProperties List

我想了解为什么 fetch 不起作用

标签: javadatabasehibernatejpapersistence

解决方案


如果一个集合是否被延迟加载,调试不是一个好的评估机制。调试器本身可能会触发初始化。

而不是使用调试器使用

org.hibernate.Hibernate.isInitialized(yourCollection) 

在加载实体后验证它是否已初始化。

如果此方法返回 false 但您仍然怀疑稍后会初始化集合,您应该在可能的后续调用(其他地方)中搜索错误。


推荐阅读