Java ORM框架FastMybatis踩坑

Java ORM框架FastmyBatis踩坑

  • 问题:使用了FastmyBatis的saveOrUpdate方法,明明设置了主键的值且表中存在,但是依然执行insert操作。导致Duplicate PK。

  • 原因:使用了其他第三方包的注解指定表的主键,没有按照FastmyBatis本身指定主键的方式去做。

    所以执行saveOrUpdate方法时找不到主键,所以日志也看不到根据主键查数据是否存在的这条sql日志,只看到insert日志。修改完之后,saveOrUpdate方法无论是insert还是update之前都会先根据主键(默认)去查表,看看这条数据是否存在。

问题代码:

使用了第三方包@Id注解去指定主键

java 复制代码
import com.gitee.fastmybatis.annotation.Table;
import javax.persistence.GeneratedValue;
import javax.persistence.Id; //或者换成import org.springframework.data.annotation.Id;
import javax.persistence.Column;

@Table(name = "xxxtable")
public class xxxEntity{
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    @Column(name = "xxx_id")
    private Long leadId;
}

解决方式

使用这个框架的指定主键和字段的方式是:

java 复制代码
import com.gitee.fastmybatis.annotation.Pk;
import com.gitee.fastmybatis.annotation.PkStrategy;
import com.gitee.fastmybatis.annotation.Table;
import com.gitee.fastmybatis.annotation.Column;

@Table(name = "xxxtable", pk = @Pk(name = "xxx_id", strategy = PkStrategy.NONE))
public class xxxEntity{
    @Column(name = "xxx_id")
    private Long xxxId;
}

感悟

Java这些同名的第三方类真是太多了,一不小心选错的话,如果编译还通过了,运行时就可能导致意想不到的bug!

相关推荐
一 乐12 小时前
宠物猫店管理|宠物店管理|基于Java+vue的宠物猫店管理管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·后端·宠物管理
r***998212 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
熊猫比分管理员13 小时前
【全栈源码解决方案】Vue+Java四端齐全,一周交付可运行项目!
java·前端·vue.js
chen_note13 小时前
K8s的配置存储与实战
java·容器·kubernetes·volume·k8s存储
i***395813 小时前
ShardingSphere-jdbc 5.5.0 + spring boot 基础配置 - 实战篇
java·spring boot·后端
Elias不吃糖13 小时前
整合了c++里面常用的STL及其常用API
开发语言·c++·学习·stl
E***q53913 小时前
后端服务限流实现,Spring Cloud Alibaba Sentinel
java·开发语言·sentinel
Jeremy爱编码13 小时前
手写LRU 缓存
java·spring·缓存
期待のcode13 小时前
springboot的热部署和静态资源映射规则
java·spring boot·后端
橘子海全栈攻城狮13 小时前
【源码+文档+调试讲解】实验室耗材管理系统springboot 094
java·开发语言·spring boot·后端·spring