首页 > 解决方案 > 自动将主键从身份(int)转换为字符串

问题描述

在我们的 java Spring(Hibernate 支持)应用程序中,我们正在评估从所有 PK 的自定义 GUID 生成到 IDENTITY 生成的大规模过渡,因为在我们的测试中它表现更好并且占用的磁盘空间更少。

目前,我们varchar(36)在数据库级别(SQL Server 2012)实现了 guid,并且在将所有 PK 大量迁移到IDENTITY INT我们的应用程序中之后,我们面临着几个问题,所有这些问题都与转换错误有关(显然)。

我想知道是否有办法在数据库级别或 ORM 级别将所有检索到的 PK 列从 int 转换为 String,以避免在我们所有的应用程序中进行大规模重构(数千个查询)。

我们使用 HBM 映射,这是我们在 ID 映射文件中的当前设置:

<id name="id" column="id" >
   <generator class="identity"></generator>
  </id>

我们的堆栈:

编辑:添加表创建示例脚本:

使用varchar(36) GUIDS

CREATE TABLE [dbo].[test_table](
    [id] [varchar](36) NOT NULL     
 CONSTRAINT [PK_test_table] 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]
GO

身份

CREATE TABLE [dbo].[test_table](
    ..other columns...
    [id] [INT] IDENTITY(1,1) NOT NULL,
 CONSTRAINT [PK_test_table_id] 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]

标签: javasql-serverdatabasehibernateidentity

解决方案


推荐阅读