解决sql server保存对象字符串转换成uniqueidentifier失败的问题

作者:qq_34721505 时间:2024-01-20 01:22:59 

一、 背景介绍

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

来源:https://blog.csdn.net/qq_34721505/article/details/72868763

标签:sql,server,字符串,uniqueidentifier
0
投稿

猜你喜欢

  • python程序中的线程操作 concurrent模块使用详解

    2021-08-28 00:27:39
  • .NET Core读取配置文件的方法

    2024-06-05 09:31:38
  • 一文详解Go语言单元测试的原理与使用

    2024-05-09 10:08:03
  • 再谈 MySQL 数据库备份恢复和乱码问题

    2009-08-19 09:35:00
  • python是否适合网页编程详解

    2021-04-19 11:35:47
  • 详解MySQL下InnoDB引擎中的Memcached插件

    2024-01-24 22:02:35
  • JS FormData对象使用方法实例详解

    2024-02-25 04:54:46
  • Python基于二分查找实现求整数平方根的方法

    2023-01-17 01:33:49
  • Python入门教程(十八)Python的For循环

    2021-07-30 04:09:59
  • 记一次python 爬虫爬取深圳租房信息的过程及遇到的问题

    2022-03-22 02:09:02
  • UCDChina.com 关于用户期望的讨论

    2008-07-10 11:55:00
  • tensorflow对图像进行拼接的例子

    2022-05-30 02:11:49
  • 怎样在MySQL数据库中导出整个数据库

    2008-12-31 15:13:00
  • 运行python脚本更改Windows背景

    2022-06-11 05:36:54
  • Python中新式类与经典类的区别详析

    2022-02-04 05:11:16
  • CSS3 + HTML5 实现未来 Web 设计

    2010-01-25 12:17:00
  • PHP header()函数使用详细(301、404等错误设置)

    2023-11-02 17:28:23
  • Oracle 9i轻松取得建表和索引的DDL语句

    2010-07-16 13:09:00
  • GOLANG版的冒泡排序和快速排序分享

    2023-07-05 05:31:09
  • 详解MySQL数据库中字符串的正确使用

    2010-06-20 15:01:00
  • asp之家 网络编程 m.aspxhome.com