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!

相关推荐
w***765513 小时前
PHP vs Python:如何选择?
开发语言·python·php
e***985713 小时前
PHP8.4重磅更新:性能飙升新特性
开发语言
Remember_99313 小时前
Java 入门指南:从零开始掌握核心语法与编程思想
java·c语言·开发语言·ide·python·leetcode·eclipse
sheji341613 小时前
【开题答辩全过程】以 基于Python的街区医院管理系统的设计与实现为例,包含答辩的问题和答案
开发语言·python
野犬寒鸦13 小时前
从零起步学习RabbitMQ || 第四章:RabbitMQ的延迟消息在项目中的运用及实现剖析
java·服务器·数据库·后端·mysql·rabbitmq
jiayong2313 小时前
Tomcat连接器与协议处理面试题
java·tomcat
C_心欲无痕13 小时前
Next.js 的哲学思想
开发语言·前端·javascript·ecmascript·nextjs
a程序小傲13 小时前
哈罗Java面试被问:布隆过滤器的误判率和哈希函数选择
java·服务器·算法·面试·职场和发展·哈希算法
lbb 小魔仙13 小时前
【Java】微服务架构 Java 实战:Spring Cloud Gateway + Nacos 全链路搭建指南
java·微服务·架构
十六年开源服务商13 小时前
WordPress多语言支持系统搭建指南
java·大数据·数据库