解决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


猜你喜欢
- Python 的 httpx 包是一个复杂的 Web 客户端。当你安装它后,你就可以用它来从网站上获取数据。像往常一样,
- 一、watch 默认是浅层,使用deep深层监听被侦听的 property,仅在被赋新值时,才会触发回调函数—&
- 前言和网络 IO 一样,文件读写同样是一个费事的操作。默认情况下,Python 使用的是系统的阻塞读写。这意味着在 asyncio 中如果调
- 对于刚刚学习编程的同学来说对编程是非常陌生的,对很多的代码也是非常陌生,高中忙于学习的我们甚至可以说是对编程是一无所知,进入大学进入到这个专
- 大多数情况下,我们使用 webpack来打包单页应用程序,这个时候只需要配置一个入口,一个模板文件,但也不尽是如此,有时候也会碰到多页面的项
- python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib
- 1.简介torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现Varia
- numpy.flip(m, axis=None)Reverse the order of elements in an array alon
- 1、远程服务器上安装jupyter notebook(配置jupyter_notebook_config.py文件)sudo pip ins
- 快照复制是在数据库之间对数据以及数据库对象进行复制并进行同步,以确保多个数据库之间一致性的一个法宝。简单的说,快照复制就是实现把一个数据库服
- 本文实例讲述了Python实现查找系统盘中需要找的字符。分享给大家供大家参考。具体如下:'''Created on
- 迭代dict的key和value我们了解了如何迭代 dict 的key和value,那么,在一个 for 循环中,能否同时迭代 key和va
- ASP访问数据库的方式有哪些?在ASP中可以通过三种方式访问数据库:1、IDC(Internet Database Connec
- 面包屑导航可以将浏览过的页面记录下来,方便很快速的跳转回某一个页面,本文介绍了几种自己封装面包屑组件的方式。一、为什么需要面包屑?当网页进行
- 本文记录了mysql 5.7.18绿色版下载安装的详细过程1、先下载mysq5.7.18绿色版,然后解压出来,放在一个目录下,我的解压mys
- 当然如果想了解更多编辑器的原理制作方法,只有你自己去下载一个在线编辑器,慢慢研究,相信会有更多的收获!HTML在线编辑器的基本概念1,什么是
- 大多的MySQL都是装在Linux上的,而我们的本机上一般都会装MySQL-Front.那如何用MySQL-Front连接远端Linux系统
- SQL语句更改表所有者SQL语句更改表所有者单个修改所有者sql语句如下:查询分析器输入:EXEC sp_changeobject
- __init__()方法意义重大的原因有两个。第一个原因是在对象生命周期中初始化是最重要的一步;每个对象必须正确初始化后才能正常工作。第二个
- 要写出一个五子棋游戏,我们最先要解决的,就是如何下子,如何判断已经五子连珠,而不是如何绘制画面,因此我们先确定棋盘五子棋采用15*15的棋盘