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

在保存实体之前避免Spring Data JPA选择

长孙阳嘉
2023-03-14

下面是一个场景,我正在使用Spring Data JPAjparepository保存一个实体(我们将其称为CG实体)。在这个CG实体中,我们有很多实体一一,一多和M-M,在这些实体中,有更多的关系等等。我正在通过主键设置CG实体,并向其添加其他实体对象。所以基本上,这个CG实体PK应该作为FK来使用CG中的大多数其他实体。

有些实体是新的,有些实体是通过创建具有给定主Id的对象来设置的(因此不需要使用相关的存储库来查找和设置对象)。在模型类中,所有的主函数都是手动设置的(没有自动生成策略)(我不能公开表结构,因为我不允许这样做)。save()函数时,JPA运行这个函数

    @Transactional
public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}

从这里开始,spring JPA通过创建select查询来检查CG是否是一个新实体。当我使用调试器中显示的SQL查询时,我观察到它使用了近70个SELECT查询。在spring documents Persistable中,我实现了它,并将overrideisnew()设置为false。我对那些通过PK创建的对象也做了同样的处理。

共有1个答案

万博涛
2023-03-14

好吧,这是通过做以下事情来克服的;

>

  • 设置fetchtype

    需要将所有FetchType设置为FetchType.lazy。没有添加任何Fetchtypes。因此,对于所有@onetomany关系,都引入了以下内容

  •  类似资料:
    • 我一直在尝试模拟一个场景,但仍然找不到最好的方法。情况如下: 代理到达一个点,他们需要从三条路径中选择一条。每条路径都是容量为1的延迟。如果第一条路径中(在延迟块中)已经有一个代理,则不满足第一个条件,代理将尝试第二个端口。在第二个端口,如果延迟块可用,它可以继续,否则它会检查第三个端口。如果所有人都很忙,那么代理应该在选择输出之前在队列中等待。 为了模拟这个过程,我使用了以下序列: 队列 选择输

    • 问题内容: 有什么方法可以使JAXB不保存其值是@Element批注中指定的默认值的字段,然后在从XML加载null或空值的元素时对其设置值?一个例子: 应生成: 而当加载 我正在尝试执行此操作,以生成干净的XML配置文件,并使其可读性更强且尺寸更小。 敬请谅解,谢谢。 问题答案: 您可以通过在get / set方法中使用逻辑并将逻辑放入其中来执行以下操作: 例 演示版 输出量 想要查询更多的信息

    • 我正在使用Spring Boot 1.5.4、Spring Data REST、Spring JPA、Hibernate,并且我正在开发一个使用REST API的Angular客户端。 Spring Data REST有很大帮助,我正在尝试遵循最佳实践,因此存储库如下所示: 我自动完成了所有的save()、delete()和findXX()方法。太好了。 现在我想知道,在保存实体之前,是否需要自定

    • 我尽量避免在我的测试代码中引入不确定性,避免使用driver.sleep(如本博客:https://medium.freecodecamp.org/how-to-write-reliable-browser-tests-using-selenium-and-node-js-c3fdafdca2a9所示)。 使用测试运行程序,我在登录表单上重复运行测试用例,重复大约10次(不调用),如下所示: 呼叫

    • 我正在开发一个独立的Java应用程序,在启动我的应用程序时,我会面临以下log4j警告: log4j:WARN找不到记录器(org.springframework.core.env.StandardEnvironment)的appender。log4j:警告请正确初始化log4j系统。 然而,在加载spring上下文(下面的main method中的第3行)之后,我能够看到所有“与spring相关

    • 在使用hibernate和jpa的spring mvc项目中,我有一个实体和一个实体。每个可以有许多,但每个只能有一个。如何为现有的保存新的? 我读过很多关于这个的帖子。如果我试图保存新的,就会出现无法保存分离实体的错误。但如果我试图保存现有的,则不会保存该角色。我读了这篇帖子,建议将hibernate注释移动到getter,但当我这样做时,我会收到一个引用未知属性的hibernate映射错误。这