当前位置: 首页 > 知识库问答 >
问题:

即使在HQL查询中使用Join Fetch也会出现Hibernate惰性初始化异常

邹坚壁
2023-03-14
"select p from Product p left join fetch p.producerEntities"

和我的持久性类:

    class Product
    {
        Set<Producer> producerEntities = new HashSet<>();
        ....
        @OneToMany(fetch = FetchType.LAZY)
        @JoinColumn(name="pid")
        public Set<Producer> getProducerEntities(){
         return producerEntities;
         }
    ....

}

我不明白问题出在哪里?

共有1个答案

商弘义
2023-03-14

如果join fetch抛出LIEX,那么我可以建议使用动态实体图,因为如果需要定义特定于用例的图。

让我们试试这一个,我做了,并为我工作。

public class DynamicEntityGraphDemo {

    public static void main(String[] args) {

        EntityManager em = HibernateUtil.getEntityManager();
        EntityGraph graph = em.createEntityGraph(Product.class);
        Subgraph itemGraph = graph.addSubgraph("producerEntities");

        Map hints = new HashMap();
        hints.put("javax.persistence.loadgraph", graph);

        Product pro = em.find(Product.class, 1, hints);
        System.out.println("DynamicEntityGraphDemo pro  = " + pro.toString() + 
                 "producer =  " + pro.getProducerEntities().toString());
    }
}

注意:动态实体图在检索子实体时使用左外部连接。(Subgraph itemGraph=graph.addSubgraph(“ProducerEntities”);

 类似资料:
  • 我正在使用spring boot开发REST应用程序,并试图优化查询的性能。我目前正在使用存储库中的,这会导致性能问题。代码如下: 个人实体 密码实体 角色实体 人员存储库 当我做一个时,在人表中的每一行都会触发选择查询,以获取密码和角色。我知道我可以在存储库中使用注释和来强制生成单个查询,但是我想知道是否有其他方法可以这样做。我正在寻找我们可以在实体级别上做的事情来减少查询。 使用Spring

  • 考虑和<代码>雇员< /代码>和<代码>地址< /代码>关系。在和之间有一对一的映射。以下是模型: 现在,当我执行以下HQL查询时,它会在内部生成两个查询。一个取员工,另一个取地址。 由Hibernate生成的SQL查询 因为我使用的是,所以我希望Hibernate只执行一个带有JOIN的查询,一次性获取员工和地址数据。 你知道为什么它要执行两个查询吗?我如何让Hibernate使用join只执行

  • 我有一个使用Hibernate 4.1、Spring 3.1和JSF 1.2的web app(myFaces)。 每次尝试访问我的一个页面时,我都有这个“懒惰初始化异常” 我想我错过了一些东西,因为我不知道如何给我的班级“会议”。 有关信息,以下是我的一些配置文件: spring-config.xml: 我的java类EOServiceType 我的Hibernate EOServiceTypeD

  • 问题内容: 有没有办法使用HQL在Grails中使用hibernate命名查询? 我已经在《利用hibernate》一书中阅读了有关它们的内容,想知道是否有办法在Grails中使用它们。 像这样的映射文件中包含命名查询以及类映射: 现在,我确定可以包含一个 hibernate映射文件, 并将其集成到Grails GORM配置中,因为在此声明,包含 hibernate映射文件的 可以在Grails中

  • 今天我学习了一个教程,作者在其中解释了hibernate关联一对多/多对一。我不想把他所有的代码都写在这里。所以,我试着把重点放在。。。 我们有两个实体:“团队”和“球员” 在代码中,我们有: 和 我最感兴趣的是回迁的类型。所以,我们加入了一支球队和一些属于这支球队的球员。我的DAO类标记为 现在我想从数据库中加载充满玩家集合的团队实体。 结果是,我将得到LazyInitializationExc