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

NamedEntityGraph仍导致延迟加载异常

范甫
2023-03-14

我有以下实体结构:

Route: -one-to-many-> :Stop: <-many-to-many-> :Child: <-many-to-many-> :Contact

因此,我在每个实体类的顶部定义了以下命名实体图,这样我就可以优化我的查询,以确定我需要走多远:

路线:

@NamedEntityGraphs({
        @NamedEntityGraph(name = "Route.stop.child.contact",
                attributeNodes = {
                        @NamedAttributeNode(value = "stops", subgraph = "Stop.child.contact")
                }),
        @NamedEntityGraph(name = "Route.stop.child",
                attributeNodes = {
                        @NamedAttributeNode(value = "stops", subgraph = "Stop.child")
                }),
        @NamedEntityGraph(name = "Route.stop",
                attributeNodes = {
                        @NamedAttributeNode(value = "stops", subgraph = "Stop")
                })
})
public class Route {...}

停止:

@NamedEntityGraphs({
        @NamedEntityGraph(name = "Stop.child.contact",
                attributeNodes = {
                        @NamedAttributeNode(value = "children", subgraph = "Child.contact")
                }),
        @NamedEntityGraph(name = "Stop.child",
                attributeNodes = {
                        @NamedAttributeNode(value = "children", subgraph = "Child")
                }),
        @NamedEntityGraph(name = "Stop", attributeNodes = {})
})
public class Stop {...}

孩子:

@NamedEntityGraphs({
        @NamedEntityGraph(name = "Child.contact",
                attributeNodes = {
                        @NamedAttributeNode(value = "contacts", subgraph = "Contact")
                }),
        @NamedEntityGraph(name = "Child", attributeNodes = {})
})
public class Child {...}

联系人:

@NamedEntityGraphs({@NamedEntityGraph(name = "Contact", attributeNodes = {})})
public class Contact {...}

我在我的仓库类中使用它们:

@EntityGraph(value = "Route.stop.child.contact", type = EntityGraph.EntityGraphType.LOAD)
Optional<Route> findRouteStopsChildrenContactsByRouteId(short routeId);

然而,我看不到正在进行任何连接查询,当我试图访问stops的子级时,会抛出一个lazyinit异常。我的理解是,这就是如何使用实体图来优化查询(例如,当我必须为每个单独的站点取子对象时,n 1问题),但我没有运气让它工作。

关于我做错了什么有什么建议吗?

共有1个答案

海叶秋
2023-03-14

试试这个它对我有用。

@NamedEntityGraph(name = "Book.details", attributeNodes = @NamedAttributeNode("reviews"))
@Table(name = "Book")
public class Book  implements Serializable
{
    @OneToMany(cascade = CascadeType.ALL , mappedBy = "book" , fetch = FetchType.EAGER)
    //@OrderBy("no ASC")
    private List<Review> reviews ; 
}

2) 获取记录(内部使用左外连接)。

@EntityGraph(value = "Book.details", type = EntityGraphType.FETCH)
  List<Book> getBooksByAuthName(String aname); 
 类似资料:
  • 描述 (Description) 延迟加载可应用于图像,背景图像和淡入效果,如下所述 - 对于图像 要在图像上使用延迟加载,请按照给定的步骤进行操作 - 使用data-src属性而不是src属性来指定图像源。 将类lazy添加到图像。 <div class = "page-content"> ... <img data-src = "image_path.jpg" class = "l

  • 我有一个基于Spring的webapp,我的问题是在代码更改后,我开始出现延迟加载异常。下面我详细描述了这种情况: 在开始的时候 我有一个账户和文字实体。一个帐户可以有多个单词,一个单词可以分配给多个帐户。 一个ccount.class 单词班 除了每个账户只能有一个“WordForToday”,它由账户中映射的单词实体表示。类如下: 一切都正常工作。特别是我有一个@Schedilly方法,每天调

  • 问题内容: 我在JPA实体中的延迟加载属性有问题。我读过许多类似的问题,但它们与spring或hibernate有关,并且他们的后代不适用或没有帮助。 该应用程序是在Wildfly应用程序服务器上运行的JEE和JPA2.1。有两个实体,DAO会话bean和servlet将它们放在一起: 当我运行此代码时,它失败并显示: 我对WebLogic / JPA1使用了非常相似的模式,并且运行平稳。任何的想

  • 问题内容: 我想知道在node.js中使用是否等效于延迟加载? 例如,如果我有一个函数需要代码中其他任何地方都不需要的特定node.js包,那么我最好在该函数内部使用它,以便仅在调用该函数时才包含所需的包。 我还不确定是否会由于缺乏对node.js架构的了解而在性能方面有所改善?我想它每次与服务器的连接都会使用更少的内存。但是,当它必须读取程序包时,它会增加磁盘的I / O吗,还是将其添加到内存中

  • 这是从这里开始的后续行动。 我正在实现一个表,它将数据异步加载到表单元格中。问题是,表单元格有时无法正确更新。有时它会以某种方式“挂起”并永远显示“加载...”。实际值只有在我在表中滚动一点时才会更新。 要复制,请在表格中快速向下滚动应用程序。某些单元格不会显示“延迟加载”值,而是显示占位符字符串。 延迟加载属性如下所示: } 应用程序如下所示: 完整的可运行代码可以在这里找到。

  • 有很多关于“懒惰”的例子和文档。也许我没有明白,但为什么要用它呢?实例化bean成本