hibernate uuid 生成策略

package com.hibernate.util.uuid;

import java.io.Serializable;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * 唯一主键生成办法。从Hibernate中提取出来
 */
public class UUID {

 private static final int IP;

 private static short counter = (short) 0;

 private static final int JVM = (int) (System.currentTimeMillis() >>> 8);

 private final static String sep = "";
 static {
  int ipadd = 0;

  try {
   ipadd = iptoInt(InetAddress.getLocalHost().getAddress());
  } catch (UnknownHostException e) {
   ipadd = 0;
  }

  IP = ipadd;
 }

 protected static int iptoInt(byte[] bytes) {
  int result = 0;
  for (int i = 0; i < 4; i++) {
   result = (result << 8) - Byte.MIN_VALUE + (int) bytes[i];
  }
  return result;
 }

 private static UUID uuid = null;

 public static UUID getInstance() {
  if (null == uuid) {
   uuid = new UUID();
  }
  return uuid;
 }

 private UUID() {
 }

 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())).toString();
 }

 /**
  * Unique in a millisecond for this JVM instance (unless there are >
  * Short.MAX_VALUE instances created in a millisecond)
  */
 protected short getCount() {
  synchronized (this.getClass()) {
   if (counter < 0)
    counter = 0;
   return counter++;
  }
 }

 /**
  * Unique down to millisecond
  */
 protected short getHiTime() {
  return (short) (System.currentTimeMillis() >>> 32);
 }

 /**
  * Unique in a local network
  */
 protected int getIP() {
  return IP;
 }

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

 protected int getLoTime() {
  return (int) System.currentTimeMillis();
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值