一、 背景介绍

web应用采用的是ssh框架,数据库使用的sql server2014版本。

二、问题:

客户要求,ID列的数据类型必须是uniqueidentifier,一开始实体类的ID设计成java.lang.String类型;映射文件中ID的增长方式是uuid.hex

private java.lang.String id;

public java.lang.String getId(){
return id;
}

public void setId(java.lang.String id){
this.id=id;
}
<id name="id" column="ID"  type="java.lang.String">
<generator class="uuid.hex"></generator>
</id>

在执行保存时报错:将字符串uniqueidentifier 时失败。

三、解决方案:

将映射文件中ID的增长方式修改为“assigned”,在程序中赋值。

/*映射文件*/

<id name="id" column="ID"  type="java.lang.String">
<generator class="assigned"></generator>
</id>

/*赋值代码*/

UUID uuid = java.util.UUID.randomUUID();
object.setId(uuid.toString);

this.save(object);

附:创建表的语句

CREATE TABLE tableName
  (
    ID UNIQUEIDENTIFIER,
    --省略其他代码
  );

补充知识:SQLServer中uniqueidentifier数据类型理解

uniqueidentifier可以理解为全局唯一标示符(GUID),可以使用newid函数初始化值,将字符串常量转换为如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字)。

例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 uniqueidentifier 值。

比较运算符可与 uniqueidentifier 值一起使用。然而,排列并非通过比较两个值的位模式来实现。允许对 uniqueidentifier 值执行的操作只有比较 (=, <>, <, >, <=, >=) 和检查 NULL(IS NULL 和 IS NOT NULL)。

不允许使用其它算术运算符。所有的列约束及属性(IDENTITY 除外)均允许用于 uniqueidentifier 数据类型。

declare @myid uniqueidentifier
set @myid=newid()
print 'Value of @myid is '+cast(@myid as varchar(255))

每次运行以上程序返回不同的uniqueidentifier

uniqueidentifier 数据类型不象IDENTITY 属性那样为新插入的行自动生成新的ID。

为了得到新的 uniqueidentifier 值,表必须具有一个指定 NEWID 函数的 DEFAULT 子句,或使用 NEWID 函数的 INSERT 语句:

CREATE TABLE MyUniqueTable
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),
Characters VARCHAR(10) )
GO
INSERT INTO MyUniqueTable(Characters) VALUES ('abc')
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')
GO

以上这篇解决sql server保存对象字符串转换成uniqueidentifier失败的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

标签:
sql,server,保存对象,字符串转uniqueidentifier

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?