当前位置:编程学习 > JAVA >>

mybatis insert 同时返回自动增长的主键

严重: Exception sending context initialized event to listener instance of class com.guangyi.core.web.listener.StartupListener
org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。
; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; 必须执行该语句才能获得结果。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71)
at org.mybatis.spring.SqlSessionUtils$SqlSessionSynchronization.beforeCommit(SqlSessionUtils.java:252)
at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:927)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:737)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
at com.guangyi.nda.service.system.FunctionService$$EnhancerByCGLIB$$413916c5.save(<generated>)
at com.guangyi.core.util.AppUtil.synMenu(AppUtil.java:294)
at co MyBatis SQL 异常 --------------------编程问答-------------------- 不知道楼主怎么取的,我一般是在在映射文件中加上keyProperty="key" useGeneratedKeys="true" --------------------编程问答-------------------- @InsertProvider(type = CUDTemplate.class, method = "save")
@Options(useGeneratedKeys = true, keyProperty = "id")
public Integer save(T obj);


删除  options 可以保存到数据库,数据库是 SqlServer   jar 是 sqljdbc   mybatis 的jar是  mybatis-3.2.2.jar --------------------编程问答--------------------
引用 1 楼 longtian1213 的回复:
不知道楼主怎么取的,我一般是在在映射文件中加上keyProperty="key" useGeneratedKeys="true"


这样不能适用所有的..


<insert id="insert" parameterType="User">
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
         select last_insert_rowid() as id
        </selectKey>


自己写sql比较靠谱 select last_insert_rowid() as id 你可以替换成select max(id)...因为有的每个数据库的返回插入值都不同... --------------------编程问答--------------------
我的在mysql下是可以 查询,改成SqlServer 之后就不行了。 没办法老大要求配置成 通用的, 
就写成
@InsertProvider(type = CUDTemplate.class, method = "save")
@Options(useGeneratedKeys = true, keyProperty = "id")
public Integer save(T obj);

这种的在mysql下可以。不知道为何在SqlServer中不行,是不是 jdbc。jar的原因 --------------------编程问答--------------------

那种返回主键应该是不支持sqlserver吧... --------------------编程问答-------------------- 问题解决。
因为mybatis中 配置的全剧变量
<!-- 对于批量更新操作缓存SQL以提高性能  SIMPLE-->  
        <setting name="defaultExecutorType" value="SIMPLE" />  

sqlserver 仅支持simple 不支持 batch 之前配置的是batch
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,