java.sql.SQLException: Field ‘id’ doesn’t have a default value

java.sql.SQLException: Field ‘id’ doesn’t have a default valuejava.sql.SQLException: Field ‘id’ doesn’t have a default value

大家好,又见面了,我是你们的朋友全栈君。

问题描述:

   最近在用Hibernate操作mysql的过程中(往mysql里添加数据,因为在代码中设置的主键即id是自增长的,所以插入数据的时候默认没有给id赋值),所以就遇到了这样的一个问题:ERROR: Field ‘id’ doesn’t have a default value

Exception in thread “main” org.hibernate.exception.GenericJDBCException: Field ‘id’ doesn’t have a default value。

详细信息如下:

五月 14, 2017 8:38:38 上午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Field 'id' doesn't have a default value
Exception in thread "main" org.hibernate.exception.GenericJDBCException: Field 'id' doesn't have a default value
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
	at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
	at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
	at com.sun.proxy.$Proxy8.executeUpdate(Unknown Source)
	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2936)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3447)
	at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
	at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
	at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203)
	at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183)
	at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167)
	at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320)
	at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287)
	at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)
	at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
	at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
	at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:727)
	at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:719)
	at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:715)
	at hotel.test.Test.main(Test.java:32)
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3361)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3295)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1852)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1975)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2476)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1583)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1859)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1777)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1762)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
	... 23 more

问题原因:

   仔细分析一下提示的错误信息,初步判定是因为主键id有关系,经过在网上验证,出现这个问题的原因是在实体类的配置文件中设置主键的生成策略是native,而在数据库中并没有设置主键自增长,因为不匹配所以就会出现这个问题。

解决办法:

  1.将数据库中对应表的主键设置为自动增长。

  2.修改配置文件主键的生成策略。

总结:

   结合最近一段时间研究Hibernate多租户的经历,没有什么困难是我们解决不了的,当我们遇到困难的时候,要冷静的去分析打印出来的日志,结合网上的资料,一定会找到解决办法的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105689.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cegui 0.8.7 安装和构建

    cegui 0.8.7 安装和构建cegui是一个开源GUI库,经过历史的验证和发展,变得非常庞大和复杂,但效率是有所保证的,常用于游戏开发。1.首先去CEGUI官网,点击进入下载界面。2.下载这两个,第一个是cegui

    2022年7月3日
  • PD快速充电协议(转)[通俗易懂]

    PD快速充电协议(转)[通俗易懂]来源-作者@:http://www.elecfans.com/d/647097.html建议读者阅读原文,确保获得完整的信息1.PD充电协议是什么意思    PD充电协议是USB-IF组织公布的功率传输协议,它可以使目前默认最大功率5V/2A的type-c接口提高到100W,同时谷歌宣布Android7.0以上的手机搭载的快充协议必须支持PD协议,意在统一快充市场。2.PD协议快充是什么意思   …

    2022年10月23日
  • 判断一个字符串是否是回文字符串「建议收藏」

    判断一个字符串是否是回文字符串「建议收藏」#include<string.h>#include<stdio.h>main(){ chara[40];//定义一个存放待判断的字符数组 inti=0,len; printf("pleaseinputyourstring:(length<40):"); gets(a);//逐个读取a数组中的字符 len=strlen(a);//计…

    2022年5月10日
  • CentOS5.3+Nginx0.7.57+Postfix+Extmail邮件系统安装配置(一))

    CentOS5.3+Nginx0.7.57+Postfix+Extmail邮件系统安装配置(一))

    2021年7月31日
  • android短信验证码方案,Android开发之属于你的短信验证码(一)

    android短信验证码方案,Android开发之属于你的短信验证码(一)不飞则已,一飞冲天;不鸣则已,一鸣惊人———司马迁最近工作又有新需求,要求用户在注册的时候需要通过手机验证码,这样做的目的是防止用户通过一个邮箱来随便的注册,那么好,今天我们就一起来学习一下Android中的短信验证码这一个知识点。如有谬误,欢迎批评指正,如有疑问欢迎留言,谢谢在说这个知识点前,我们首先来了解下聚合数据一、聚合数据介绍聚合数据是一家国内最大的基础数据API提供商,专业…

    2022年7月25日
  • MDK生成bin文件的方法及bin文件大小对程序的影响

    MDK生成bin文件的方法及bin文件大小对程序的影响MDK生成bin文件的方法及bin文件大小对程序的影响   使用MDK软件一般是不生成bin文件的,而是生成的是hex文件。但是在某些时候需要生成bin文件,或者要知道bin文件的大小。因为bin文件的大小直接关乎程序能不能下载到芯片,例如STM32F103ZET6的flash大小是512KB,那么bin文件的大小就不能超过512KB,否则程序就不能下载。下面说说如何生成bin文件:这一步是…

    2022年10月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号