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

红酒人生 2013-07-18 04:07:26
严重: 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
...全文
988 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinyangmeng 2016-03-08
  • 打赏
  • 举报
回复
引用 6 楼 zhengrongsuiyue 的回复:
问题解决。 因为mybatis中 配置的全剧变量 <!-- 对于批量更新操作缓存SQL以提高性能 SIMPLE--> <setting name="defaultExecutorType" value="SIMPLE" /> sqlserver 仅支持simple 不支持 batch 之前配置的是batch
还有一个地方sql server配置同样需要simple <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> <constructor-arg index="1" value="SIMPLE" /> </bean>
lameboy 2015-10-17
  • 打赏
  • 举报
回复
引用 6 楼 zhengrongsuiyue 的回复:
问题解决。 因为mybatis中 配置的全剧变量 <!-- 对于批量更新操作缓存SQL以提高性能 SIMPLE--> <setting name="defaultExecutorType" value="SIMPLE" /> sqlserver 仅支持simple 不支持 batch 之前配置的是batch
多谢谢一样的问题找了半天
红酒人生 2013-08-01
  • 打赏
  • 举报
回复
问题解决。 因为mybatis中 配置的全剧变量 <!-- 对于批量更新操作缓存SQL以提高性能 SIMPLE--> <setting name="defaultExecutorType" value="SIMPLE" /> sqlserver 仅支持simple 不支持 batch 之前配置的是batch
小丑哥_V5 2013-07-19
  • 打赏
  • 举报
回复
那种返回主键应该是不支持sqlserver吧...
红酒人生 2013-07-18
  • 打赏
  • 举报
回复
我的在mysql下是可以 查询,改成SqlServer 之后就不行了。 没办法老大要求配置成 通用的, 就写成 @InsertProvider(type = CUDTemplate.class, method = "save") @Options(useGeneratedKeys = true, keyProperty = "id") public Integer save(T obj); 这种的在mysql下可以。不知道为何在SqlServer中不行,是不是 jdbc。jar的原因
小丑哥_V5 2013-07-18
  • 打赏
  • 举报
回复
引用 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)...因为有的每个数据库的返回插入值都不同...
红酒人生 2013-07-18
  • 打赏
  • 举报
回复
@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
S117 2013-07-18
  • 打赏
  • 举报
回复
不知道楼主怎么取的,我一般是在在映射文件中加上keyProperty="key" useGeneratedKeys="true"

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧