首页 > 解决方案 > 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

我怎样才能解决这个问题?

标签: javaspring-boothibernatejpa

解决方案


(?, ?, ?, ...) 在休眠日志中是正常的,实际参数值没有被记录,这并不意味着插入的值是空的。

请注意,查询正在插入字段“create_ime”,并且错误表示不接受空值的列是“create_time”,因此表中似乎有两列,可能是由于错字更正或重命名造成的。


推荐阅读