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回答
-
小菜哥你好:
其实,你可以看到生成的 SQL 语句就已经错误了,因为 SQL 语句中已经指定了这个字段是 null,那么,即使你设定了数据表字段的默认值,也不会生效的,这是 SQL 的语法。
所以,你需要做的是让 null 字段不在 SQL 语句中,怎么做呢?你需要添加两个注解:
@DynamicInsert @DynamicUpdate
@DynamicInsert :表示 insert 对象的时候,生成动态的 insert 语句,如果这个字段的值是 null 就不会加入到 insert 语句当中;
@DynamicUpdate:表示 update 对象的时候,生成动态的 update 语句,如果这个字段的值是 null 就不会被加入到 update 语句中
所以,框架与工具出错的概率极低,如果出错,基本上都是自己的使用错误。
我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!
20
相似问题