В нашем приложении java Spring (Hibernate backed) мы оцениваем масштабный переход от создания пользовательских GUID для всех PK к генерации IDENTITY, поскольку в наших тестах он работает лучше и требует меньше места на диске.
В настоящее время мы внедряем varchar(36)
направляющих на уровне базы данных (SQL Server 2012), и после масштабной миграции всех PK в IDENTITY INT
мы сталкиваемся с несколькими проблемами в нашем приложении, все из которых связаны с ошибками приведения (очевидно).
Мне интересно, есть ли способ на уровне базы данных или ORM преобразовать все извлеченные столбцы PK из int в String, чтобы избежать массового рефакторинга во всех наших приложениях (тысячи запросов).
Мы используем сопоставления HBM, и это наша текущая настройка в файле сопоставления для идентификатора:
<id name="id" column="id" >
<generator class="identity"></generator>
</id>
Наш стек:
- Sql Server 2012
- Hibernate 4.3.5
- Spring 4.1.6
Редактировать: Добавление сценария примера создания таблицы:
С varchar (36) НАПРАВЛЯЮЩИЕ
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]