updateQuery返回1,但未反映在db中(spring数据jpa)

时间:2018-11-24 18:06:35

标签: spring-data-jpa spring-data

但是更新适用于以下代码段

 Department department= departmentRepository.findOne(300L);
 department.setName("rajiv");
 departmentRepository.saveAndFlush(department);

但是这种情况是单调映射,可能是我最终遇到3个查询的情况,其中包括2个选择查询和一个更新查询。 为了优化我的更新方式,我尝试使用这种不会更新的方式,因为executeUpdate()将受影响的行返回为1。

2 个答案:

答案 0 :(得分:0)

您的查询中有一个小错误。

您已使用 = 运算符,而应使用 like 运算符


您还可以获取 @NamedNativeQueries

的帮助

示例

DepartmentRepository.java

@Query(nativeQuery = true)
public List<Department> update(Long id);

Department.java

@SqlResultSetMapping(name="updateResult", columns = { @ColumnResult(name = "count")})

@NamedNativeQueries({
@NamedNativeQuery(
        name = "Department.update", 
        query = "UPDATE departmemnt SET name like 'rajiv' WHERE id = ?",
        resultSetMapping = "updateResult")
})

NativeQueries的运行速度比普通的Hibernate Queries

答案 1 :(得分:0)

是的,这可能会有所帮助,在春季数据的情况下,我找到了一种使其可更新的方法,因为他们坚持使用@transactional并扩展了jparepository的功能,现在仅命中了一条语句

@Modifying(clearAutomatically = true)
@Transactional(readOnly=false)
@Query("update Department d set d.name =:name where d.id=:id")
int update(@Param("name")String name,@Param("id")Long id);

如果我选择使用nativeQuery

@Modifying(clearAutomatically = true)
@Transactional(readOnly=false)
@Query(value="update Department d set d.name =:name where d.id=:id",nativeQuery=true)
int update(@Param("name")String name,@Param("id")Long id);