【问题标题】:hibernate nested exception during database persistance数据库持久化期间的休眠嵌套异常
【发布时间】:2019-01-19 10:26:17
【问题描述】:

我在插入记录数据库期间遇到以下问题。

2018-08-12 16:06:26.874 警告 5482 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper:SQL 错误:1364,SQLState: HY000 2018-08-12 16:06:26.875 错误 5482 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper:字段“country_id”没有 有一个默认值查询是:插入bi_person(additional_info, 性别ID,姓氏,姓名)值(?,?,?,?),参数['Java master',48,'WW','John'] 2018-08-12 16:06:27.047 错误 5482 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[.[dispatcherServlet]]: Servlet.service() 用于 servlet [dispatcherServlet] 在上下文中的路径 [/bi-message-svc/v1] 抛出异常[请求处理失败; 嵌套异常是 org.springframework.orm.jpa.JpaSystemException: 无法执行语句;嵌套异常是 org.hibernate.exception.GenericJDBCException:无法执行 声明] 有根本原因

org.mariadb.jdbc.internal.util.dao.QueryException: 字段 'country_id' 没有默认值查询是:插入bi_person (additional_info, gender_id, last_name, name) 值 (?, ?, ?, ?), 参数 ['Java master',48,'WW','John']*

//国家:

@Table(name = "bi_country")
@Entity
public class Country {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_country")
    private Integer id;

    @Column(name = "name")
    private String name;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name="country_book", joinColumns=@JoinColumn(name="id_country"), inverseJoinColumns=@JoinColumn(name="id_person"))
    private Set<Person> persons;

//性别:

@Table(name = "bi_gender")
@Entity
public class Gender {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_gender")
    private Integer id;

    @Column(name = "name")
    private String name;

//人

@Table(name = "bi_person")
@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_person")
    private Integer id;

    @Column(name = "name")
    private String name;
    @Column(name = "last_name")
    private String lastName;
    @Column(name = "additional_info")
    private String additionalInfo;


    @ManyToOne
    private Gender gender;

    @ManyToMany(cascade=CascadeType.ALL)
    private Set<Country> countries;

【问题讨论】:

    标签: java mysql spring hibernate


    【解决方案1】:

    您只需要仔细阅读错误信息。它说:

    字段'country_id'没有默认值查询是:插入bi_person(additional_info,gender_id,last_name,name)...

    因此,您的 bi_person 表有一个名为 country_id 的字段,它没有任何默认值。当然,Hibernate 不会在该字段中插入任​​何内容,因为它在实体 Person 中没有任何此类字段。所以你得到了那个例外。

    数据库架构与您的实体设计不匹配。修复一个或另一个,或两者兼而有之,并确保它们彼此兼容。

    如果您的数据库设计,一个人有 一个 国家(因此列 country_id 个人)。在您的对象设计中,一个人有许多个国家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多