【发布时间】:2021-11-17 14:04:29
【问题描述】:
我正在尝试使用 @update 注释进行更新。查询触发正常,没有任何异常,但方法每次返回 0(更新 0 行)。数据库中没有更新。并且相同的查询在 SQLdeveloper 工具中运行良好。 使用 Oracle 数据库。
@Update(
"UPDATE extra.EMMT SET CASE_STATUS = #{updateBean.CASE_STATUS}, CASE_STATUS_TimeStmp = #{updateBean.CASE_STATUS_TimeStmp} WHERE T_TimeStmp >= #{updateBean.LAST_T_TimeStmp} AND T_TimeStmp <= #{updateBean.T_TimeStmp} AND T_NO = #{updateBean.T_NO} AND EM_NO = #{updateBean.EM_NO}"
)
public long update(@Param("updateBean") EMMT updateBean);
“EMMT updateBean”是与表 EMMT 的列具有相同成员的类。
我还尝试创建两个不同的会话,一个用于更新,另一个用于插入,但没有太大帮助。
会话配置。
@Bean(name = "updatesession")
public SqlSessionFactory sqlSessionFactoryupdate() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
SqlSessionFactory sqlSessionFactory = factoryBean.getObject();
sqlSessionFactory.getConfiguration().setJdbcTypeForNull(JdbcType.NULL);
sqlSessionFactory.getConfiguration().setDefaultStatementTimeout(15);
sqlSessionFactory.getConfiguration().addMappers("com.xyz.myapp.mapper");
return sqlSessionFactory;
}
使用Mybatis-spring - 2.2.0
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
任何帮助都将不胜感激。 谢谢。
示例 - 上面给出了sqlSession的配置。
豆类。
class justForUpdate {
String CASE_STATUS;
String EM_NO ;
Timestamp T_TimeStmp;
Long T_NO ;
Timestamp CASE_STATUS_TimeStmp;
Timestamp LAST_T_TimeStmp;
}
服务等级
updateservice {
@Autowired
private SqlSessionFactory sessions;
public void work() {
//obj of justForUpdate = auth
//or can pass list of justForUpdate objs.
try(SqlSession session = sessions.openSession(true)){
Update_mapper upd = session.getMapper(Update_mapper.class);
long val = upd.update(auth);
System.out.print(">>>>>>>>> "+val);
}
}
}
Update_Mapper
@Mapper
public interface Update_mapper {
@Update(
"UPDATE extra.EMMT SET CASE_STATUS = #{updateBean.CASE_STATUS}, CASE_STATUS_TimeStmp = #{updateBean.CASE_STATUS_TimeStmp} WHERE T_TimeStmp >= #{updateBean.LAST_T_TimeStmp} AND T_TimeStmp <= #{updateBean.T_TimeStmp} AND T_NO = #{updateBean.T_NO} AND EM_NO = #{updateBean.EM_NO}"
)
public long update(@Param("updateBean") EMMT updateBean);
}
【问题讨论】:
-
当数据库中没有满足
UPDATE语句的WHERE谓词的记录时,预计会更新零行。根据您的信息,我们无能为力。只能说,如果您在 update 之外的其他会话中 insert - 并且不提交 insert - 这正是您应该做的期待... -
嗨@MarmiteBomber,感谢您的回复。但问题是,即使对于小而简单的更新查询,同样的事情也会发生。
UPDATE extra.EMMT SET CASE_STATUS = #{updateBean.CASE_STATUS} WHERE EM_NO = #{updateBean.EM_NO}.. 应用程序执行查询正常,但返回 0。我也尝试了单个会话,没有任何帮助。 -
请发布一个可重现的示例,否则没有机会提供帮助...
-
@MarmiteBomber 完成。
-
@Akif,如果你能分享一个像these 这样的小型演示项目,我会研究一下。
标签: oracle spring-boot mybatis spring-mybatis