我有一个使用MySQL数据库的spring引导项目。我有一个名为Employee的表,它有一个主索引(id)不是一个一个编号的(1、31、35、100等)。我希望他们被编号为(1,2,3,4)
还有类似的问题-- 这里
我得到了上面链接的SET @i=0; UPDATE Employee SET id=(@i:=@i+1);查询表单,如果直接在MySQL工作台上执行它,它就可以正常工作了。
我的问题是如何使用spring注释执行上述查询?
EmployeeRepository.java
public interface EmployeeRepositoryextends JpaRepository<Employee, Integer> {
@Transactional
@Modifying
@Query(value = "SET @i=0; UPDATE Employee e SET e.id=(@i:=@i+1)", nativeQuery = true)
public void renumberingId();
}EmployeeService.java
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository repo;
public void renumber() {
repo.renumberingId();
}
}当使用junit测试renumber()方法时,它给出了以下异常
org.hibernate.QueryException: Space is not allowed after parameter prefix ':' [SET @i=0; UPDATE Employee e SET e.id=(@i:=@i+1)];请帮助如何使用SET @i=0; UPDATE Employee SET id=(@i:=@i+1);方法执行此查询renumberingId()。
发布于 2020-08-25 12:45:54
您的查询集
SET @i=0; UPDATE Employee e SET e.id=(@i:=@i+1)是正确的。只需稍微修改一下--将变量初始化移到UPDATE:UPDATE Employee e, (SELECT @i:=0) var SET e.new_column =(@i:=@i+1);--您的查询在MySQL工作台中运行良好。问题是@Query()注释总是在:之后搜索参数
如果是这样,则可以使用枚举填充新列。
UPDATE Employee t0
JOIN ( SELECT t1.id, COUNT(t2.id) cnt
FROM Employee t1
JOIN Employee t2 ON t1.id >= t2.id
GROUP BY t1.id ) t3 ON t0.id = t3.id
SET t0.new_column = t3.cnt;发布于 2020-08-25 11:52:33
你不需要这么做,就是这样做的:
import javax.persistance.*;
@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public long id;
} 它应该能自动完成你期望的事情
https://stackoverflow.com/questions/63578094
复制相似问题