java.sql.SQLException:字段';供应商id和x27;不';没有默认值

java.sql.SQLException:字段';供应商id和x27;不';没有默认值,java,mysql,sql,Java,Mysql,Sql,我从中收到一条错误消息: java.sql.SQLException: Field 'supplier_id' doesn't have a default value at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) at com.mysql.jdbc.MysqlIO

我从中收到一条错误消息:

 java.sql.SQLException: Field 'supplier_id' doesn't have a default value
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402)
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317)
每个人都能帮我吗? 我的数据库字段不是空的。 但我想得到这样的结果:

插入xxx(名称、密码)值('xxx','xxx')
插入xxx(姓名、密码、人)值('xxx'、'xxx'、'xxx')
两个success(客户端中的两个都是success,但java代码中是error,错误代码位于顶部标题),而不是
插入xxx(名称、密码)值('xxx','xxx')
为false;
我的mysql jar是mysql-connector-java-5.0.8

错误是不言自明的。您的列
supplier\u id
没有默认值。因此,在插入过程中,mysql无法确定在
supplier\u id
列中插入什么。您可以执行以下三项操作之一:-
1.使用以下命令将默认值添加到列
supplier\u id

ALTER TABLE `xxx` ALTER `supplier_id` SET DEFAULT NULL

2.在插入过程中为
供应商id
列提供一些值。
3.向列添加自动增量,并使用以下代码向其添加主键:-

ALTER TABLE `xxx` CHANGE `supplier_id` `supplier_id` INT(10)AUTO_INCREMENT PRIMARY KEY;

您使用的表中有“供应商id”列。它没有默认值,在插入时,此列未获得任何值。使用一些默认值初始化“供应商id”列,或者如果将供应商id用作主键,则使用自动递增

若要解决此问题,请在执行
插入时为
供应商id
提供一个值,或者在数据库中使列
可为空

我添加了这个属性

<property name="hbm2ddl.auto">create</property>
创建

进入到hibernate.cfg.xml文件中,它对我起了作用。

可能有两种情况

  • 您已将列的默认值声明为“无”,并且在插入时不会向其传递任何值

  • 您已在数据库中声明了该列,但尚未在实体对象中声明相同的列,这导致了错误


  • 在我的例子中,问题是主键列没有设置为自动递增

    我是这样解决的:

    alter table library modify column Id int NOT NULL AUTO_INCREMENT;
    

    这意味着您的供应商id没有默认值,您必须插入一个。类似问题的解决方案可以在中找到:我的字段类型为VARCHAR且不是主键,是否有其他方法解决此错误?确定,因此第三个选项不适用。因此,选择第一个选项(推荐)。向列中添加默认值传递我在第一个选项中提到的sql查询,以使
    supplier\u id
    列的默认值为null