簡體   English   中英

mssql的UUID瘋狂

[英]UUID madness with mssql

我的數據庫條目具有一個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代碼(前者:表定義,后者:數據庫訪問對象)

class ChannelTable(tag: Tag) extends Table[ChannelTuple](tag, "Channel") {
  def id = column[UUID]("Id", O.PrimaryKey)
  def channelId = column[Int]("Channel_Id", O.NotNull)
  def timer = column[UUID]("Timer_Id", O.NotNull)
  def from = column[Timestamp]("FromTime", O.NotNull)
  def to = column[Timestamp]("ToTime", O.NotNull)
  def mon = column[Boolean]("Mon", O.NotNull)
  def tues = column[Boolean]("Tues", O.NotNull)
  def wed = column[Boolean]("Wed", O.NotNull)
  def thu = column[Boolean]("Thu", O.NotNull)
  def fri = column[Boolean]("Fri", O.NotNull)
  def sat = column[Boolean]("Sat", O.NotNull)
  def sun = column[Boolean]("Sun", O.NotNull)
  def * = (id, channelId, timer, from, to, mon, tues, wed, thu, fri, sat, sun)
}

object ChannelDAO extends EntityDAO[Channel, ChannelTuple] {
  private val entities = TableQuery[ChannelTable]
  [...]
  override def get(id: UUID)(implicit session: Session): Option[Channel] = {
    val y = for {
      a <- entities if a.id === id
    } yield (a)
    if (y.list.length > 1) throw new NonUniqueResultException
    y.firstOption
  }
  [...]
}

Slick將UUID轉換為不同於SQL Server的唯一標識符。

.NET / SQL Server中未指定字節序。

如果要從MSSQL獲取UUID,請確保對UUID使用大端編碼,以使其與JVM一致。

查看此SO帖子。 看起來您將需要創建一種方法來轉換UUID。

如何將.NET Guid讀取為Java UUID

對我來說效果很好:

> 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM