Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UUID madness with mssql

My database entry has a UUID with the value (extracted using the Microsoft SQL Server Management Studio)

CDF86F27-AFF4-2E47-BABB-2F46B079E98B

After this is loaded into my Scala application, the toString method yields this value

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

How does this happen? And how can I programmatically create a UUID instance, when I have only the bare string CDF86F27-AFF4-2E47-BABB-2F46B079E98B at hand?

Relevant Slick code (former: table definition, latter: database access object)

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
  }
  [...]
}
like image 470
Coxer Avatar asked Mar 14 '14 10:03

Coxer


1 Answers

Slick converts a UUID to a uniqueidentifier differently then SQL Server.

endianness is unspecified in .NET / SQL Server.

Make sure to use big endian encoding for UUIDs to be consistent with the JVM if you are getting the UUID from MSSQL.

Check out this SO post. Looks like you will need to create a method to translate the UUID.

How to read a .NET Guid into a Java UUID

like image 90
SoftwareCarpenter Avatar answered Sep 27 '22 18:09

SoftwareCarpenter