java - JpaRepository.save() 生成 hql 将空值插入表中
问题描述
在我的 Spring boot+ hibernates+mysql 应用程序中,我有自己的UserRepository
:
public interface UserRepository extends JpaRepository<User, Integer> {
我user
在数据库中有一个表mysql
,以及一个相应的实体类。
@Entity
@Table(name = "user")
public class User {
/**
* This field was generated by MyBatis Generator. This field corresponds to the database column user.id
* @mbg.generated Mon Sep 28 14:41:58 CST 2020
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id",length=32) //
private Integer id;
/**
* This field was generated by MyBatis Generator. This field corresponds to the database column user.ori_id
* @mbg.generated Mon Sep 28 14:41:58 CST 2020
*/
@Column(name="ori_id",length=32) //
private Integer oriId;
/**
* This field was generated by MyBatis Generator. This field corresponds to the database column user.user_name
* @mbg.generated Mon Sep 28 14:41:58 CST 2020
*/
@Size(min = 3, max = 18, message = "Minimum user name length: 3 characters")
@Column(name="user_name",unique = true, nullable = false)
private String userName;
该findAll
方法工作正常,但是当我创建一个用户对象和调用save
方法时:
List<User> list=userRepository.findAll();
userRepository.deleteAll();
User admin = new User();
admin.setUserName("admin");
admin.setPassword("admin");
admin.setEmail("admin@email.com");
admin.setCreateTime(new Date());
admin.setRole(Role.ROLE_ADMIN.name());
userRepository.save(admin);
生成的hql是:
Hibernate:
insert
into
user
(create_ime, email, last_user_ime, last_password_change, mobile, ori_id, password, real_name, role, role_id, status, user_count, user_name, user_ime)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
似乎该save
方法正在保存一个包含所有字段的对象null
,我得到了错误:
2020-09-30 10:24:24.657 WARN 15956 --- [ restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1364, SQLState: HY000
2020-09-30 10:24:24.662 ERROR 15956 --- [ restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper : Field 'create_time' doesn't have a default value
我怎样才能解决这个问题?
解决方案
(?, ?, ?, ...) 在休眠日志中是正常的,实际参数值没有被记录,这并不意味着插入的值是空的。
请注意,查询正在插入字段“create_ime”,并且错误表示不接受空值的列是“create_time”,因此表中似乎有两列,可能是由于错字更正或重命名造成的。
推荐阅读
- java - 无法加载 io.micrometer.core.instrument.Timer$1
- r - 如何从图像中删除 tibble?
- security - Azure DevOps:拒绝向读者/项目有效用户查看“任务组”
- python - 更改等高线图上的颜色和标签的位置
- csv - 将 CSV 文件从 Google Drive 加载到 BigQuery 会产生零行且没有错误
- batch-file - 如何使用批处理文件脚本编辑 web.config 文件内容?
- php - 学说 - 数据包乱序
- keras - 加载 .hdf5 模型时出现问题(ValueError:未知层:FixedBatchNormalization)
- java - CVE-2018-2783 - 可以澄清一下这里的 CVE 是什么意思吗?
- ios - 在 Cordova 中,如何添加要在 Swift 而不是 Objective C 中构建的 iOS 平台?