Я работаю над проектом, целью которого является преобразование существующего приложения в SQL Server. Тем не менее, я сталкиваюсь с проблемами с генерированием ID, в частности, с преобразованием типов данных.Исключение преобразования SQL Server: ошибка преобразования типа данных varchar в числовой
The Hibernate аннотации для моего удостоверения колонки следующим образом:
@Id
@GeneratedValue(generator="ID_GEN", strategy=GenerationType.TABLE)
@TableGenerator(name="ID_GEN", table="[$SSMA_seq_SEQ_EXAMPLE_ID]")
@Column(name="ID", unique="true", nullable="false")
public String getId() {
return this.id;
}
Этот идентификатор столбца этой таблицы карты к varchar(50)
, в то время как $SSMA_seq_SEQ_EXAMPLE_ID
карты на таблицу с одной id
колонки с типом данных numeric(38,0)
.
Когда я пытаюсь вставить (создавая объект Java и сохраняя его), я получаю следующее исключение: com.microsoft.sqlserver.jdbc.SQLServerException: Error converting data type varchar to numeric
.
Концептуально, имеет смысл, что numeric(38,0)
будет вписываться в varchar(50)
, но похоже, что SQL Server implicit conversion в этом случае не работает. К сожалению, изменение определения базы данных на данный момент не является опцией.
Существуют ли какие-либо глобальные настройки, которые будут вынуждать это преобразование либо в спящем режиме, либо в SQL Server? Поскольку я использую hibernate для генерации идентификаторов, у меня нет большого контроля над SQL, который создается для захвата идентификатора, прежде чем передать этот объект в базу данных.
Из сообщения об ошибке не похоже, что проблема связана с NUMERIC (38, 0) в VARCHAR (50). Похоже, что все наоборот - пытается преобразовать VARCHAR (50) в NUMERIC (38, 0). –
Также обратите внимание, что если у вас есть столбец IDENTITY на вашем SQL Server, в большинстве случаев он не должен вставляться с явными значениями. (и SSMA имеет некоторую логику для преобразования использования последовательностей Oracle в SQL Server IDENTITY, но вам нужно будет настроить его в SSMA) – IgorK