解决sql server保存对象字符串转换成uniqueidentifier失败的问题
一、背景介绍
web应用采用的是ssh框架,数据库使用的sqlserver2014版本。
二、问题:
客户要求,ID列的数据类型必须是uniqueidentifier,一开始实体类的ID设计成java.lang.String类型;映射文件中ID的增长方式是uuid.hex
privatejava.lang.Stringid; publicjava.lang.StringgetId(){ returnid; } publicvoidsetId(java.lang.Stringid){ this.id=id; }
在执行保存时报错:将字符串uniqueidentifier时失败。
三、解决方案:
将映射文件中ID的增长方式修改为“assigned”,在程序中赋值。
/*映射文件*//*赋值代码*/ UUIDuuid=java.util.UUID.randomUUID(); object.setId(uuid.toString); this.save(object);
附:创建表的语句
CREATETABLEtableName ( IDUNIQUEIDENTIFIER, --省略其他代码 );
补充知识:SQLServer中uniqueidentifier数据类型理解
uniqueidentifier可以理解为全局唯一标示符(GUID),可以使用newid函数初始化值,将字符串常量转换为如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每个x是0-9或a-f范围内的一个十六进制的数字)。
例如,6F9619FF-8B86-D011-B42D-00C04FC964FF即为有效的uniqueidentifier值。
比较运算符可与uniqueidentifier值一起使用。然而,排列并非通过比较两个值的位模式来实现。允许对uniqueidentifier值执行的操作只有比较(=,<>,<,>,<=,>=)和检查NULL(ISNULL和ISNOTNULL)。
不允许使用其它算术运算符。所有的列约束及属性(IDENTITY除外)均允许用于uniqueidentifier数据类型。
declare@myiduniqueidentifier set@myid=newid() print'Valueof@myidis'+cast(@myidasvarchar(255))
每次运行以上程序返回不同的uniqueidentifier
uniqueidentifier数据类型不象IDENTITY属性那样为新插入的行自动生成新的ID。
为了得到新的uniqueidentifier值,表必须具有一个指定NEWID函数的DEFAULT子句,或使用NEWID函数的INSERT语句:
CREATETABLEMyUniqueTable (UniqueColumnUNIQUEIDENTIFIERDEFAULTNEWID(), CharactersVARCHAR(10)) GO INSERTINTOMyUniqueTable(Characters)VALUES('abc') INSERTINTOMyUniqueTableVALUES(NEWID(),'def') GO
以上这篇解决sqlserver保存对象字符串转换成uniqueidentifier失败的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。