我有一个Java WebApplication,它使用Spring和Hibernate来创建和填充表。该表具有唯一的ID,该ID由以下Hibernate配置设置:
true
这适用于所有MySQL用户。但是,使用SQLServer 2008 Developer Edition的一个用户似乎发现,只要应用程序尝试将值放入此表,系统就会抛出类型错误:
<hibernate-mapping>
<class name="com.myco.TransactionImpl" table="myco_transaction">
<id name="id" type="java.lang.Integer">
<generator class="native">
<param name="sequence">id_column_sequence</param>
</generator>
</id>
<property name="user" type="java.lang.String">
<column name="tx_user" not-null="false" unique="false" />
</property>
...
</class>
</hibernate-mapping>
这个错误似乎很清楚。尚未生成ID。但为什么呢?
我们尝试使用SQL Server 2014和SQL Server Express 2008在内部解决此问题,但是当我们使用其中任何一个系统时,表中的插入工作并且会自动生成ID。
我不知道如何继续。我认为问题是以下之一:
有关如何处理此问题的任何帮助或建议都非常感谢。
更新:
SQL Server 2008计算机上的表定义:
WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 339, SQLState: S0001
ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - DEFAULT or NULL are not allowed as explicit identity values.
ERROR Exception - Error attempting to save instance:
更新
用户已声明此版本的SQL Server 2012 Developer Edition也失败了。
答案 0 :(得分:1)
由于身份已经在桌面上定义并且有效,因此您无需插入身份。该表将在插入时自动生成。如果您想要插入自己的标识,则需要在执行插入之前运行IDENTITY_INSERT ON
命令。一句警告,如果您尝试插入已生成的标识,插入将会出错。这种类型的操作通常在一张清新的空桌上完成。