-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 8 posts ] 
Author Message
 Post subject: Hibernate id generator uuid.string fails in SQLServer
PostPosted: Tue Nov 18, 2003 4:22 am 
I have an object with id configured as follows:

<id
name="portfolioId"
column="portfolio_id"
type="java.lang.String"
unsaved-value="null"
>
<generator class="uuid.string">
</generator>
</id>

The column portfolio_id in MS SQLServer is of type uniqueIdentifier. When saving a new object, I get this bug:
Msg 8169, Lvl 16, State 2, Syntax error converting from a character string to uniqueidentifier


However, when I assign a UUID manually and configure mapping as <generator class="assigned">, SqlServer doesn't complain.
Unfortunately, manual assignment makes cascade dtabase saves VERY ugly!

This is probably a SQLserver bug, based on what I've seen on google. Does anyone have a workaround?


Regards,

Eliot Clingman


Top
  
 
 Post subject:
PostPosted: Tue Nov 18, 2003 4:24 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 12:50 pm
Posts: 5130
Location: Melbourne, Australia
Does it help to try uuid.hex?


Top
 Profile  
 
 Post subject: SqlSever uuid problem
PostPosted: Tue Nov 18, 2003 4:29 am 
gavin wrote:
Does it help to try uuid.hex?


Both uuid.hex and uuid.string give the same error.

Eliot


Top
  
 
 Post subject:
PostPosted: Tue Nov 18, 2003 7:08 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 12:50 pm
Posts: 5130
Location: Melbourne, Australia
Oh, this is the special SQL server GUID type, is it?

I reckon this has got to be doable using a custom id generator and (perhaps) a custom type.


Top
 Profile  
 
 Post subject: We Built UUID generator that works with MS SQlServer
PostPosted: Wed Jan 28, 2004 3:23 am 
Hi Gavin,

We just had a consultant develop an SQl server Id generator for us. WOuld you be interested in incorporating into your source? I have pasted it below, because this forum doesn't support file attachments.

If you want it as a proper file attachment, I have sent it that way as a standard email to your email address.

Regards, Eliot

gavin wrote:
Oh, this is the special SQL server GUID type, is it?

I reckon this has got to be doable using a custom id generator and (perhaps) a custom type.


JAva Code follows this line...
_______________________




//$Id: UUIDHexGenerator.java,v 1.6 2003/04/25 03:40:33 oneovthafew Exp $
package net.sf.hibernate.id;

import java.io.Serializable;
import java.util.Properties;

import net.sf.hibernate.Hibernate;
import net.sf.hibernate.dialect.Dialect;
import net.sf.hibernate.engine.SessionImplementor;
import net.sf.hibernate.type.Type;
import net.sf.hibernate.util.PropertiesHelper;
import net.sf.hibernate.util.StringHelper;

/**
* <b>uuid.hex</b><br>
* <br>
* A <tt>UUIDGenerator</tt> that returns a string of length 32,
* This string will consist of only hex digits. Optionally,
* the string may be generated with seperators between each
* component of the UUID.
*
* @see UUIDStringGenerator
* @author Gavin King
*/

public class UUIDMsSqlGenerator extends UUIDGenerator implements Configurable {

private String sep="-";

protected String format(int intval) {
String formatted = Integer.toHexString(intval);
StringBuffer buf = new StringBuffer("00000000");
buf.replace( 8-formatted.length(), 8, formatted );
return buf.toString();
}

protected String pformat(int intval) {
String formatted = Integer.toHexString(intval);
StringBuffer buf = new StringBuffer("00000000");
buf.replace( 8-formatted.length(), 8, formatted );
//return buf.toString();
String buf2 = buf.toString();
return buf2.substring(0,4)+"-"+buf2.substring(4,8);

}

protected String format(short shortval) {
String formatted = Integer.toHexString(shortval);
StringBuffer buf = new StringBuffer("0000");
buf.replace( 4-formatted.length(), 4, formatted );
return buf.toString();
}

public Serializable generate(SessionImplementor cache, Object obj) {
sep = "-";
return new StringBuffer(36)
.append( format( getIP() ) ).append(sep)
.append( format( getHiTime() ) ).append(sep)
.append( format( getCount() ) ).append(sep)
.append( pformat( getJVM() ) )
.append( format( getLoTime() ) )

.toString().toUpperCase();
}

public static void main( String[] args ) throws Exception {
Properties props = new Properties();
props.setProperty("seperator", "/");
IdentifierGenerator gen = new UUIDMsSqlGenerator();
( (Configurable) gen ).configure(Hibernate.STRING, props, null);
IdentifierGenerator gen2 = new UUIDMsSqlGenerator();
( (Configurable) gen2 ).configure(Hibernate.STRING, props, null);

for ( int i=0; i<10; i++) {
String id = (String) gen.generate(null, null);
System.out.println( id + ": " + id.length() );
String id2 = (String) gen2.generate(null, null);
System.out.println( id2 + ": " + id2.length() );
}
}


public void configure(Type type, Properties params, Dialect d) {
sep = PropertiesHelper.getString("seperator", params, StringHelper.EMPTY_STRING);
}

}


Top
  
 
 Post subject:
PostPosted: Thu Jan 29, 2004 6:28 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
Can you please post it to JIRA, this is the appropriate place for that.

_________________
Emmanuel


Top
 Profile  
 
 Post subject: MS GUID
PostPosted: Tue Feb 24, 2004 7:34 pm 
Regular
Regular

Joined: Mon Nov 03, 2003 6:10 am
Posts: 75
Just curious if there is a built in type for the MS SQL SERVER GUID now?

Or is the code above usable?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Feb 25, 2004 7:04 am 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
Don't think it has been applied yet.
Check the JIRA bug HB-658. There are some updates to the code.

_________________
Emmanuel


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 8 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.