当我尝试更新一个实体的一个字段时,我是新来的,我注意到在日志中Hibernate执行两个查询,在更新之前,它会对所有字段进行SELECT。可以吗?为什么Hibernate执行SELECT?我如何用一个UPDATE查询更新一个字段?此外,当我试图更新一个实体中的单个标题时,它有另一个嵌套实体,我最终得到了一堆SELECT。我认为这对性能不好,或者我错了?
Something s = somethingRepository.findById(id);
s.setField1(someData);
somethingRepository.save(s);
在互联网上,我找到了使用 @Modifying 和 @Query(“UPDATE ...”)进行自定义查询的解决方案,但通过这种方式,我需要为每个字段进行自定义查询。有没有更好的解决方案?
因为在内部,repository.save() 方法会执行更新引用。如果您转到内部类并检查,您将首先看到,它将检查数据库中是否存在该实体,然后在此基础上执行添加或更新。如果您不希望运行 SELECT 查询,则可以使用 JPA 存储库提供的本机查询。你可以做这样的事情:
@Modifying
@Transactional
@Query("UPDATE <tableName> SET <columnName> = ?1 WHERE <condition>" ,nativeQuery=true)
void updateSomething(String value);
根据您粘贴在问题中的源代码
Something s = somethingRepository.findById(id);
s.setField1(someData);
somethingRepository.save(s);
如果您询问的实体 Something 在Hibernate第一级缓存中不存在,它将进行一次 SELECT 调用。
当您更新字段1的值时,它将进行另一个更新调用。使用save与否并不重要,因为Hibernate脏检查将确保所有的更改都得到更新。
否则,您可以使用带有JPQL和命名参数的@Modifying的自定义方法。它的可读性比?1.
@Modifying
@Query("UPDATE Something s SET s.field = :fieldValue WHERE s.id = :id")
void updateField(String fieldValue, UUID id);
关于这一点,“当我试图更新一个实体中的一个标题,而这个实体有另一个嵌套的实体”时,你会看到多个调用。这取决于你如何创建实体之间的关系。如果你能分享实体和它们的关系,那么只有它能被准确地回答。
问题内容: 这是表 用户数 和代码.. 问题答案: Ladislav的答案已更新为使用DbContext(在EF 4.1中引入):
我需要在另一个相关实体更新后对一个实体执行更新。 我有两个实体:和,关系为1:N。两者都有字段。状态取决于所有子状态字段。因此,如果更新了一个,我需要重新计算的新状态并持久化/更新它。 我实现了一个监听器: 监听器在中进行了注释,并且正在正确调用它。但是,在流程完成后,仍然保持旧状态,即使使用正确的新状态调用。
因此,我看了关于使用Spring数据的JPA的各种教程,在许多情况下都有不同的做法,我不太确定正确的方法是什么。 假设存在follwing实体: 我们还有一个DTO,它在服务层中检索,然后交给控制器/客户端。 因此,现在假设客户想要在webui中更改他的名称--然后将会有一些控制器操作,其中将会有更新的DTO(使用旧ID和新名称)。 现在我必须将这个更新的DTO保存到数据库中。 不幸的是,目前没有
这个问题几乎说明了一切。使用JPARepository,我如何更新一个实体? JPARepository只有一个save方法,它并不告诉我它实际上是create还是update。例如,我向数据库用户插入一个简单的对象,它有三个字段:、和: 然后我只需调用,此时它实际上是对数据库的插入: 到目前为止还不错。现在我想更新这个用户,比如说改变他的年龄。为此,我可以使用查询,无论是QueryDSL还是Na
我正在尝试更新我的用户实体,我想到了一个错误:错误:NULL值违反了“id”列的Not NULL约束详细信息:失败的行包含(null,1,1) 这个问题肯定源于我在用户和配置文件之间的关系,即n-n
当创建新的实体关联时,是否有任何spring data rest事件处理程序可用?即。置入关联资源URL。 关联资源:http://docs.spring.io/spring-data/rest/docs/2.3.0.release/reference/html/#repository-resources.Association-resource