Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用mssql的UUID疯狂_Sql Server_Scala_Uuid - Fatal编程技术网

Sql server 使用mssql的UUID疯狂

Sql server 使用mssql的UUID疯狂,sql-server,scala,uuid,Sql Server,Scala,Uuid,我的数据库条目有一个UUID,其值为(使用Microsoft SQL Server Management Studio提取) CDF86F27-AFF4-2E47-BABB-2F46B079E98B 将其加载到Scala应用程序中后,toString方法将生成此值 276ff8cd-f4af-472e-babb-2f46b079e98b 这是怎么发生的?当我手头只有裸字符串CDF86F27-AFF4-2E47-BABB-2F46B079E98B时,如何以编程方式创建UUID实例 相关的Slick

我的数据库条目有一个UUID,其值为(使用Microsoft SQL Server Management Studio提取)

CDF86F27-AFF4-2E47-BABB-2F46B079E98B

将其加载到Scala应用程序中后,toString方法将生成此值

276ff8cd-f4af-472e-babb-2f46b079e98b

这是怎么发生的?当我手头只有裸字符串CDF86F27-AFF4-2E47-BABB-2F46B079E98B时,如何以编程方式创建UUID实例

相关的Slick代码(前者:表定义,后者:数据库访问对象)

类ChannelTable(tag:tag)扩展表[ChannelTuple](tag,“Channel”){
def id=列[UUID](“id”,O.PrimaryKey)
def channelId=列[Int](“通道Id”,O.NotNull)
def timer=列[UUID](“计时器Id”,O.NotNull)
def from=列[Timestamp](“FromTime”,O.NotNull)
def to=列[时间戳](“ToTime”,O.NotNull)
def mon=列[Boolean](“mon”,O.NotNull)
def tues=列[布尔值](“tues”,O.NotNull)
def wed=列[布尔值](“wed”,O.NotNull)
def thu=列[布尔值](“thu”,O.NotNull)
def fri=列[布尔值](“fri”,O.NotNull)
def sat=列[布尔值](“sat”,O.NotNull)
def sun=列[布尔值](“sun”,O.NotNull)
def*=(id、channelId、计时器、从、到、周一、周二、周三、周四、周五、周六、周日)
}
对象ChannelDAO扩展EntityDAO[通道,ChannelTuple]{
private val entities=TableQuery[ChannelTable]
[...]
覆盖def get(id:UUID)(隐式会话:会话):选项[Channel]={
val y=用于{
a 1)抛出新的UnuniquereSultException
y、 第一选择
}
[...]
}
对我来说很好:

> val uuidString = "CDF86F27-AFF4-2E47-BABB-2F46B079E98B"
uuidString: String = CDF86F27-AFF4-2E47-BABB-2F46B079E98B

> java.util.UUID.fromString(uuidString)
res2: java.util.UUID = cdf86f27-aff4-2e47-babb-2f46b079e98b

Slick将UUID转换为与SQL Server不同的唯一标识符。

在.NET/SQL Server中未指定endianness

如果要从MSSQL获取UUID,请确保UUID使用big-endian编码与JVM一致

查看这篇SO帖子。看起来您需要创建一个方法来翻译UUID


这是真的。但当我通过slick从数据库加载实体时,UUID会打印值“276ff8cd-f4af-472e-babb-2f46b079e98b”o.o-对于为了更好地说明问题而添加的完全相同的entityCode,您的代码是什么样子的?数据库中的列和Slick中的列使用哪种类型?列类型是java.util.UUID。我知道.Net的GUID二进制编码与UUID使用的不同,因此如果Slick不知道这一事实,它可能会解释您的问题。查看MSDNI上的Guid.ToByteArray文档我想你是对的,但是我如何让Slick意识到这一点?你认为我必须为此编写自己的UUID类吗?你也可以将Slick列更改为字符串,而不是java.util.UUID.Yeah,但我更愿意使用最接近的匹配类型,即UUID imho
> val uuidString = "CDF86F27-AFF4-2E47-BABB-2F46B079E98B"
uuidString: String = CDF86F27-AFF4-2E47-BABB-2F46B079E98B

> java.util.UUID.fromString(uuidString)
res2: java.util.UUID = cdf86f27-aff4-2e47-babb-2f46b079e98b