Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据存储库使用性能_Java_Mysql_Spring_Hibernate_Spring Data - Fatal编程技术网

Java Spring数据存储库使用性能

Java Spring数据存储库使用性能,java,mysql,spring,hibernate,spring-data,Java,Mysql,Spring,Hibernate,Spring Data,我们正在使用spring框架和MySQL数据库开发一个web应用程序 两个更新流之间是否存在重大性能差异: 1) 使用以下PlayerRepository功能: @Query("UPDATE Player p SET p.firstName = ?2, p.lastName = ?3, p.age = ?4 WHERE p.id = ?1") @Modifying public int setSomeFields(Long playerId, String firstName, String l

我们正在使用spring框架和MySQL数据库开发一个web应用程序

两个更新流之间是否存在重大性能差异:

1) 使用以下PlayerRepository功能:

@Query("UPDATE Player p SET p.firstName = ?2, p.lastName = ?3, p.age = ?4 WHERE p.id = ?1")
@Modifying
public int setSomeFields(Long playerId, String firstName, String lastName, Long age);
在PlayerService中:

@Transactional
public void setSomeFields(Long playerId, String firstName, String lastName, Long age) {
       this.playerRepository.setSomeFields(playerId, firstName, lastName, age);

}
@Transactional
public void setSomeFields(Long playerId, String firstName, String lastName, Long age) {
       this.playerRepository.setFirstName(firstName, playerId);
       this.playerRepository.setLastName(lastName, playerId);
       this.playerRepository.setAge(age, playerId);

}
2) 在PlayerService中使用以下方法:

@Transactional
public void setSomeFields(Long playerId, String firstName, String lastName, Long age) {
       this.playerRepository.setSomeFields(playerId, firstName, lastName, age);

}
@Transactional
public void setSomeFields(Long playerId, String firstName, String lastName, Long age) {
       this.playerRepository.setFirstName(firstName, playerId);
       this.playerRepository.setLastName(lastName, playerId);
       this.playerRepository.setAge(age, playerId);

}

在性能上是否大致相当?当我想支持部分更新时,第二种方法对我来说更灵活,我想在实现之前确保这种方法是可行的。

两者都不是。。。为什么不更新一个
Player
对象,让hibernate找出最有效的方法呢。选项2生成更多查询,因此理论上速度较慢。但是我知道你的整个方法是错误的。如果我用hibernate获取对象,而不是用hibernate获取大量不必要的数据,如果我想更新一个特定的字段,为什么我要从DB获取整个对象?为什么不执行更新查询并完成它呢?更详细-如果我要获取,我将不得不使用锁定机制。无论您是否使用hibernate(IMHO),您都必须使用锁定机制。您可能还想了解JPA/Hibernate是如何工作的,如果您检索一个播放器,您还可以为该播放器获取一个代理,而不是真正的对象,并在该播放器上创建对象)。其次,我认为,如果您试图过早地优化某些甚至可能不成问题的内容,更不用说您为更新带来的额外负担了。Imagina 120个可以更新的字段,您将如何管理这些字段?现在看来这是个好主意,但真的吗?