【问题标题】:JPA Two lazy collections in one entity - how to run JPA query to get entity and only one collectionJPA 一个实体中的两个惰性集合 - 如何运行 JPA 查询以获取实体和只有一个集合
【发布时间】:2017-06-02 20:16:37
【问题描述】:

我在编写正确的 JPA 查询以获取具有一个填充集合的实体时遇到问题。例如,我有两个集合的实体(我希望两个集合都有 FetchType.LAZY):

public class Entity {

private String value;   

@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name="entity_id")
private List<ElementA> elementsA;

@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name="entity_id")
private List<ElementB> elementsB;

}

我想运行 JPA 查询并仅获取有关实体和集合“elementsA”的信息。我正在尝试:

"From Entity e join fetch e.elementsA eA"

但我有错误:

Caused by: org.hibernate.LazyInitializationException: 
failed to lazily initialize a collection of role: 
model.jpa.entities.Entity.elementsB, 
could not initialize proxy - no Session

我应该如何编写此查询以仅获取有关集合“elementsA”的信息。

谢谢,达雷克。

【问题讨论】:

  • FWIW JPQL 以“SELECT e”开头,没有它是不可移植的。

标签: hibernate jpa jakarta-ee jpql


【解决方案1】:

您的提取是正确的,但您的异常表明稍后在会话关闭后,在您调用 entity.getElementsB(); 的代码中某处触发另一个查询/提取,导致 LazyInitializationException 因为会话在那个时候关闭点。

【讨论】:

    猜你喜欢
    • 2018-06-07
    • 2015-03-18
    • 2013-05-28
    • 1970-01-01
    • 2011-04-03
    • 2015-01-18
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    相关资源
    最近更新 更多