-
hibernate的ID生成策略(native报错)5
<class name="com.tech.model.Event" table="EVENTS"> <id name="id" column="EVENT_ID" type="long" unsaved-value="null"> <generator class="native"/> </id> <property name="date" type="timestamp" column="EVENT_DATE"/> <property name="title" column="EVENT_TITLE"/> </class>
我用native的话就这样.
[java] 09:59:58,576 DEBUG JDBCExceptionReporter:69 - could not insert: [com.tech.model.Event] [insert into EVENTS (EVENT_ID, EVENT_DATE, EVENT_TITLE) values (null, ?, ?)]
[java] java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]无法将 NULL 值插入列 'EVENT_ID',表 'test.dbo.EVENTS';该列不允许空值。INSERT 失败。
我换 increment 这个生成策略就没错...
问题补充:
1楼说的答案我试了..我把ID类型都改成 INT .数据库也改成INT.但是还是报这个错误...2009年7月06日 10:20
14个答案 按时间排序 按投票排序
-
采纳的答案
用mssql,你需要设置主键bigint, autoincreament
用oracle,你需要设置主键bigint, sequence
这样才能在hibernate中指定native2009年7月09日 12:53
-
上面的朋友基本都说的比较全面了。不过我估计你的问题出在你的数据库方言设置问题。检查一下你的hibernate.cfg.xml文件中的<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>。如果没问题,我建议你全面检查一下你的配置,错误往往是在细微的地方。
2009年7月10日 10:44
-
Event_ID不需要插入啊。你用insert into event(event_date,event_title) values(?,?)就行了,你不是想用hibernate的id生成策略吗?id都自动生成了,你插入值是不行的
2009年7月09日 17:59
-
你的ID既然是自增的,只要在数据库里写明自增的起始位比如identity(1,1)就行了,自增的不需要插入,把insert值里面ID栏去掉~~试试看哦,我也有过这样的问题,
2009年7月09日 16:29
-
native
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。2009年7月09日 08:50
-
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。但如果是oracel数据库,需要在数据库中建立一个名称为hibernate_sequence的sequence。hibernate会自动调用该sequence。如果是sqlserver请记得把表中的id设置成自动增长identity类型
注意:如果数据库可以使用identity,那么identity是hibernate的首选,比如在sqlserver中,如果你开始使用hilo,然后改成native方式,并不会自动仍然使用hilo,hibernate会使用identity方式,这个时候就有异常出现了,必须保证sqlserver中的表使用identity方式。2009年7月06日 14:50
-
EVENTS (EVENT_ID, EVENT_DATE, EVENT_TITLE) values (null, ?, ?)
好好看看这个,如果你的EVENT_ID,类型修改成了int型的话,就不能给主键插入null了,还有,检查一下你的EVENT_DATE和EVENT_TITLE,看看是否允许为空,因为你的出错信息提示说,不能插入空值。2009年7月06日 11:36
-
这与你的数据库中的主键(一般是ID)类型有关,如果主键的类型是varchar等等的字符型的话还是用uuid,如果是数字的话就用native,不过在真正的项目应用中,主键一般不会设置成数字的,毕竟数值的范围是有限的,再说了也不方便控制,大多数情况下都是varchar吧,用当前的时间加上自己定义的变量来做主键的情况还是多些。
总之一句话,如果数据库中的主键类型和Hibernate中的映射关系类型不匹配的话就会报出你粘出来的那个错误。2009年7月06日 10:30
相关推荐
常用Hibernate主键生成策略 常用Hibernate主键生成策略 常用Hibernate主键生成策略 常用Hibernate主键生成策略
Hibernate主键生成策略.doc ··········
hibernata 映射主键自动生成,跨数据库时,如何设置,主要讲述在oracle的mapping文件中的设置,以及orcle数据库中的设置
NULL 博文链接:https://alpha2009.iteye.com/blog/1074750
http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
关于Hibernate的各种主键生成策略与配置详解
Hibernate各种主键生成策略详解,包括 assigned increment hilo seqhilo sequence identity native uuid foreign uuid.hex sequence-identity 等
学习hibernate的好文档,了解hibernate框架必须有的书
hibernate的主键生成策略介绍,详细介绍了有关hibernate的常用主键生成策略,希望对一些正在学习hibernate的同学有一定的帮助
Hibernate中主键生成策略,开发的时候经常会用到的我都整理到这里了~
hibernate 主键生成策略 说明简单,易懂,全面,
Hibernate主键生成策略.docHibernate主键生成策略.doc
Hibernate各种主键生成策略与配置详解 1、assigned 主键由外部程序负责生成,在 save() 之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无关,可以跨数据库。在存储对象前,必须要使用...
j2ee关于hibernate的生成策略,里面有详细的操作步骤,希望对大家有帮助