严重: 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 coMyBatisSQL异常

解决方案 »

  1.   

    不知道楼主怎么取的,我一般是在在映射文件中加上keyProperty="key" useGeneratedKeys="true"
      

  2.   

    @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
      

  3.   


    这样不能适用所有的..
    <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)...因为有的每个数据库的返回插入值都不同...
      

  4.   


    我的在mysql下是可以 查询,改成SqlServer 之后就不行了。 没办法老大要求配置成 通用的, 
    就写成
    @InsertProvider(type = CUDTemplate.class, method = "save")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    public Integer save(T obj);这种的在mysql下可以。不知道为何在SqlServer中不行,是不是 jdbc。jar的原因
      

  5.   

    那种返回主键应该是不支持sqlserver吧...
      

  6.   

    问题解决。
    因为mybatis中 配置的全剧变量
    <!-- 对于批量更新操作缓存SQL以提高性能  SIMPLE-->  
            <setting name="defaultExecutorType" value="SIMPLE" />  sqlserver 仅支持simple 不支持 batch 之前配置的是batch