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);
}
}