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!

相关推荐
一行代码一行诗++1 分钟前
C语言中scanf详解
c语言·开发语言
凤山老林4 分钟前
26-Java this 关键字
java·开发语言
ZenosDoron10 分钟前
keil软件修改字体,Asm editor,和C/C++ editor的区别
c语言·开发语言·c++
焦糖玛奇朵婷27 分钟前
解锁扭蛋机小程序的五大优势
java·大数据·服务器·前端·小程序
山栀shanzhi31 分钟前
C/C++之:构造函数为什么不能设置为虚函数?
开发语言·c++·面试
lsx20240632 分钟前
.toggleClass() 方法详解
开发语言
yuan1999739 分钟前
C&CG(列与约束生成)算法,来解决“风光随机性”下的微网鲁棒配置问题
c语言·开发语言·算法
SamDeepThinking40 分钟前
别让一个超时的第三方http接口拖垮所有接口
java·后端·架构
李白的天不白1 小时前
读到数据为undefind是的几种情况
开发语言·javascript·ecmascript
YaBingSec1 小时前
玄机靶场:供应链安全-供应链应急-Part2 通关笔记
java·笔记·安全