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!

相关推荐
历程里程碑9 分钟前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
qq_2290580129 分钟前
docker中检测进程的内存使用量
java·docker·容器
一个天蝎座 白勺 程序猿34 分钟前
KingbaseES查询逻辑优化深度解析:从子查询到语义优化的全链路实践
开发语言·数据库·kingbasees·金仓数据库
我真的是大笨蛋42 分钟前
InnoDB行级锁解析
java·数据库·sql·mysql·性能优化·数据库开发
钦拆大仁1 小时前
Java设计模式-单例模式
java·单例模式·设计模式
小手cool1 小时前
在保持数组中对应元素(包括负数和正数)各自组内顺序不变的情况下,交换数组中对应的负数和正数元素
java
笨手笨脚の1 小时前
深入理解 Java 虚拟机-04 垃圾收集器
java·jvm·垃圾收集器·垃圾回收
skywalker_111 小时前
Java中异常
java·开发语言·异常
2501_940315261 小时前
航电oj:首字母变大写
开发语言·c++·算法
没有天赋那就反复1 小时前
JAVA 静态方法
java·开发语言