postgresql 序列自增 & Mybatis添加功能
发布时间:2020-12-13 17:14:30 所属栏目:百科 来源:网络整理
导读:简单记录一下问题: 以前通过Oracle+Mybatis做新增功能时主键都是通过sequence自增的,了解到postgresql也有序列,遂尝试结合Mybatis做一个简单的insert功能,结果报错: org.springframework.jdbc.BadSqlGrammarException: CrudMapper.saveGoods (batch inde
简单记录一下问题: 以前通过Oracle+Mybatis做新增功能时主键都是通过sequence自增的,了解到postgresql也有序列,遂尝试结合Mybatis做一个简单的insert功能,结果报错: org.springframework.jdbc.BadSqlGrammarException: CrudMapper.saveGoods (batch index #1) failed. Cause: java.sql.BatchUpdateException: 批次处理 0 insert into t_crud values (seq_crud.nextval,'牧马人鼠标','鼠标',168.0) 被中止,呼叫 getNextException 以取得原因。 ; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: 错误: 对于表"seq_crud",丢失FROM子句项 位置:32 at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74) at org.mybatis.spring.SqlSessionUtils$SqlSessionSynchronization.beforeCommit(SqlSessionUtils.java:291) at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95) at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:928) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTrans 错误很明显,BadSqlGrammarException,即SQL语法错误,oracle中的序列使用方法和pg的明显是不一样的,我们在oracle中可以通过序列的隐式对象nextval来获取序列的下一个值,而在postgresql中nextval是作为一个函数来使用,也就是说: Oracle中的 seq_xxx(序列名).nextval等同于 Postgresql中的nextval('序列名') 问题成功解决,下面贴出mapper和测试方法:
<insert id="saveGoods" parameterType="cn.zhsz.model.admin.Goods"> insert into t_crud values (nextval('seq_crud'),#{name},#{type},#{price}) </insert> 关于postgresql的序列基本和oracle的序列没有区别,可以在pgAdmin中通过可视化工具方便的进行创建:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |