JpaRepository.save()生成hql,将空值插入表中

时间:2020-09-30 02:35:42

标签: java spring-boot hibernate jpa

在我的Spring boot +休眠+ 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方法可以正常工作,但是当我创建一个User对象并调用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

我该如何解决?

1 个答案:

答案 0 :(得分:2)

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

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

相关问题