0 0

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个答案 按时间排序 按投票排序

0 0

采纳的答案

用mssql,你需要设置主键bigint, autoincreament
用oracle,你需要设置主键bigint, sequence
这样才能在hibernate中指定native

2009年7月09日 12:53
0 0

native 主键生成策略  你当然不能自己进行对id赋值啊  数据库自己会管理id
    插入语句中不对id赋值

2009年7月12日 19:27
0 0

native 主键生成策略  你当然不能自己进行对id赋值啊  数据库自己会管理id
    插入语句中不对id赋值

2009年7月12日 11:10
0 0

上面的朋友基本都说的比较全面了。不过我估计你的问题出在你的数据库方言设置问题。检查一下你的hibernate.cfg.xml文件中的<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>。如果没问题,我建议你全面检查一下你的配置,错误往往是在细微的地方。

2009年7月10日 10:44
0 0

Event_ID不需要插入啊。你用insert into event(event_date,event_title) values(?,?)就行了,你不是想用hibernate的id生成策略吗?id都自动生成了,你插入值是不行的

2009年7月09日 17:59
0 0

你的ID既然是自增的,只要在数据库里写明自增的起始位比如identity(1,1)就行了,自增的不需要插入,把insert值里面ID栏去掉~~试试看哦,我也有过这样的问题,

2009年7月09日 16:29
0 0

native

  由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

2009年7月09日 08:50
0 0

你的数据库里面的id要设置为indentity(1,1)

2009年7月08日 00:43
0 0

由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
0 0

EVENTS (EVENT_ID, EVENT_DATE, EVENT_TITLE) values (null, ?, ?)
好好看看这个,如果你的EVENT_ID,类型修改成了int型的话,就不能给主键插入null了,还有,检查一下你的EVENT_DATE和EVENT_TITLE,看看是否允许为空,因为你的出错信息提示说,不能插入空值。

2009年7月06日 11:36
0 0

还有在测试的时候把原来的数据删掉。 

2009年7月06日 11:31
0 0

native是由hibernate来管理的,要求自增长的那种,不是的话,请使用assigned

2009年7月06日 11:07
0 0

楼主先说一下你的主键在数据库中是什么样的。 

2009年7月06日 11:04
0 0

这与你的数据库中的主键(一般是ID)类型有关,如果主键的类型是varchar等等的字符型的话还是用uuid,如果是数字的话就用native,不过在真正的项目应用中,主键一般不会设置成数字的,毕竟数值的范围是有限的,再说了也不方便控制,大多数情况下都是varchar吧,用当前的时间加上自己定义的变量来做主键的情况还是多些。
总之一句话,如果数据库中的主键类型和Hibernate中的映射关系类型不匹配的话就会报出你粘出来的那个错误。

2009年7月06日 10:30

相关推荐

Global site tag (gtag.js) - Google Analytics