jpa操作数据库默认值不生效的问题

来源:9-2 不再随意设置数据类型,不给未来留隐患

笑看从前小菜哥

2020-10-29

一哥 我们项目插入操作用的是jpa,但是我数据库有个非空字段,并且设置了默认值,当我数据库插入操作时,哪个字段在java的实体对象中是null的时候,会插入失败,报字段不能为空。

Hibernate: insert into cms_transport_plan_service (deleted, distance, flag, pay_type, plan_id, price, price_id, remark, service_type, tax_rate, transport_type, vend_uscc, vendor_type) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2020-10-29 09:53:47.824 [http-nio-8080-exec-5] [,] WARN o.h.e.j.s.SqlExceptionHelper - SQL Error: 1048, SQLState: 23000
2020-10-29 09:53:47.824 [http-nio-8080-exec-5] [,] ERROR o.h.e.j.s.SqlExceptionHelper - Column ‘vendor_type’ cannot be null
上面是报错的日志,为什么 我设置了默认值 ,但是还是会报错的

写回答

1回答

张勤一

2020-10-29

小菜哥你好:

    其实,你可以看到生成的 SQL 语句就已经错误了,因为 SQL 语句中已经指定了这个字段是 null,那么,即使你设定了数据表字段的默认值,也不会生效的,这是 SQL 的语法。

    所以,你需要做的是让 null 字段不在 SQL 语句中,怎么做呢?你需要添加两个注解:

@DynamicInsert
@DynamicUpdate

    @DynamicInsert :表示 insert 对象的时候,生成动态的 insert 语句,如果这个字段的值是 null 就不会加入到 insert 语句当中;

    @DynamicUpdate:表示 update 对象的时候,生成动态的 update 语句,如果这个字段的值是 null 就不会被加入到 update 语句中 

    所以,框架与工具出错的概率极低,如果出错,基本上都是自己的使用错误。


    我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!

2
0

Java实操避坑指南 SpringBoot/MySQL/Redis错误详解

掌握业务开发中各种类型的坑,,Java web开发领域通用

466 学习 · 204 问题

查看课程