A friend told me he used UUID from Hibernate as primary key at database table. I haven’t tried that way. Usually I depend on database auto-generated ID or some methods. ( I will post another blog to discuss them later.)

First I found java.util.UUID mini-FAQ is a quick start. And Time based UUID Generation Algorithm gives me another idea.

Now the most important thing is how can I use it on database? is that a good idea? so here is their comments.

What should I choose for my primary key?

Don’t Let Hibernate Steal Your Identity

Primary Keys: IDs versus GUIDs

Starting Up Hibernate

HIBERNATE with <generator> element

Hibernate forum: Use UUID as primary key or opaque field

Code snip from Hibernate:

public class UUIDGenerator {

 private static final int IP;
 public static int IptoInt( byte[] bytes ) {
  int result = 0;
  for (int i=0; i>> 8 );

 public UUIDGenerator() {

  * Unique across JVMs on this machine (unless they load this class
  * in the same quater second - very unlikely)
 protected int getJVM() {
  return JVM;

  * Unique in a millisecond for this JVM instance (unless there
  * are > Short.MAX_VALUE instances created in a millisecond)
 protected short getCount() {
  synchronized(UUIDGenerator.class) {
   if (counter>> 32 );
 protected int getLoTime() {
  return (int) System.currentTimeMillis();

 private final static 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 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() {
  return new StringBuffer(36)
   .append( format( getIP() ) ).append(sep)
   .append( format( getJVM() ) ).append(sep)
   .append( format( getHiTime() ) ).append(sep)
   .append( format( getLoTime() ) ).append(sep)
   .append( format( getCount() ) )