Shu*_* A. 1 java mysql spring spring-data-jpa
我写了一个MySQL程序
CREATE DEFINER=`root`@`localhost` PROCEDURE `calculate_user_rank`()
BEGIN
DROP TABLE IF EXISTS `user_rank`;
CREATE TABLE `user_rank`
AS (SELECT
user.id,
(SELECT COUNT(*)+1 FROM user_profile WHERE points>x.points) AS rank FROM
user_profile x, user WHERE user.user_profile_id = x.id);
UPDATE user, user_rank SET user.rank = user_rank.rank WHERE user.id = user_rank.id;
END
Run Code Online (Sandbox Code Playgroud)
此存储过程根据表points中的列计算用户排名user_profile,使用user_rank数据创建一个新表并更新user表rank中的表列user_rank。
当我从 MySQL Workbench 执行此存储过程时,它工作正常。JpaRepository但是当我从as调用它时:
@Transactional
@Query(nativeQuery = true, value = "CALL calculate_user_rank()")
void setUserRank();
Run Code Online (Sandbox Code Playgroud)
它抛出异常:
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)
at org.hibernate.loader.Loader.doList(Loader.java:2620)
at org.hibernate.loader.Loader.doList(Loader.java:2600)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429)
at org.hibernate.loader.Loader.list(Loader.java:2424)
...
Caused by: java.sql.SQLException: ResultSet is from UPDATE. No Data.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:6995)
Run Code Online (Sandbox Code Playgroud)
是不是程序有问题?
不是注释@Query,而是@Procedure:
@Transactional
@Procedure(procedureName = "calculate_user_rank")
void setUserRank();
Run Code Online (Sandbox Code Playgroud)