gpt4 book ai didi

java - 为什么我的 native 生成策略不只在 SQL Server 上创建 id?

转载 作者:行者123 更新时间:2023-12-01 11:28:21 24 4
gpt4 key购买 nike

我有一个 Java WebApplication,它使用 Spring 和 Hibernate 来创建和填充表。该表有一个唯一的 id,由以下 Hibernate 配置设置:

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

这对于我们所有的 MySQL 用户来说都很好用。然而,使用 SQLServer 2008 Developer Edition 的一位用户似乎发现,每当应用程序尝试将值放入此表时,系统都会抛出以下类型的错误:

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:

这个错误看起来很明显。 id 尚未生成。但为什么呢?

我们尝试使用 SQL Server 2014 和 SQL Server Express 2008 在内部解决此问题,但是当我们使用这些系统中的任何一个时,表中的插入操作都会正常,并且会自动生成 id。

我不知道如何继续。我认为问题是以下之一:

  1. 用户以某种方式修改了他的数据库以不创建序列。如果可能的话,我该如何重现这个或询问用户如何检查?
  2. SQL Server 2008 Express 和 SQL Server 2008 Developer Edition 有本质上的不同。
  3. SQL Server 2008 的 hibernate 生成策略是错误的。

非常感谢有关如何处理此问题的任何帮助或建议。

更新:

SQL Server 2008 计算机上的表定义:

CREATE TABLE [dbo].[myco_transaction](
[id] [int] IDENTITY(1,1) NOT NULL,
[tx_user] [varchar](255) NULL,
[tx_date] [numeric](19, 0) NOT NULL,
[restored_tx] [int] NULL,
[restored_maint_urn] [varchar](255) NULL,
[ds_action] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

更新:

该用户表示这在他的 SQL Server 2012 Developer Edition 版本上也失败了。

最佳答案

由于身份已经在表上定义并且正在工作,因此您不需要插入它。该表将在插入时自动生成。如果您想插入自己的身份,则需要在插入之前运行 IDENTITY_INSERT ON 命令。警告一句,如果您尝试插入已经生成的标识,则插入将会出错。这种类型的操作通常在新的空表上完成。

关于java - 为什么我的 native 生成策略不只在 SQL Server 上创建 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30623152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com