我正在用java 8和oracle11g在spring-boot 1.5.22中编写一段代码。在这里,在我的存储库类中,我尝试将一个本机查询称为-
@Query(value = "ALTER SEQUENCE <SEQ_NAME> RESTART START WITH 0", nativeQuery = true)
void resetSequence();
当我试图在我的服务Impl类中调用这个方法时,我得到了以下错误:-
java.lang.NegativeArraySizeException:-1
然而,我可以使用java代码作为-来执行选择序列命令
@Query(value = "select <Seq_name>.nextVal from dual", nativeQuery = true)
int getNextCount();
我不知道如何在这里使用java代码/job命令重置序列。
尝试添加@Modifying
注释
好吧,ALTER SEQUENCE
不是一个查询,所以它不应该以您调用它的方式工作。
将工作的是返回到普通JDBC并调用类似的东西
con.createStatement().execute "ALTER SEQUENCE SEQ RESTART START WITH 0"
两个附加备注
ALTER SEQUENCE
不是弹簧数据的典型用例,因此它应该仅用于JUnit等的一些支持代码中。您必须使用
MINVALUE 0
创建序列才能重置它(默认值为1(。否则会出现异常ORA-04006: START WITH cannot be less than MINVALUE
您可以使用实体管理器来修改序列并执行春季启动快捷方式不允许的SQL查询
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@PersistenceContext
EntityManager entityManager;
public void resetSequence(String data) {
entityManager
.createNativeQuery("SELECT setval('sequence_value', "+data+", FALSE);")
.getSingleResult()
;
}
您可以使用实体管理器重置您的序列
ORACLE
entityManager.createNativeQuery("DROP SEQUENCE"+seqName(.executeUpdate((;entityManager.createNativeQuery("CREATE SEQUENCE"+seqName+"START WITH"+size(.executeUpdate((
POSTGRESQL
entityManager.createNativeQuery("SELECT setval(?,?,true("(.setParameter(1,seqName(.setParameter(2,size(.getResultList((