`
xuan198451
  • 浏览: 8260 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

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

}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    hibernate主键生成策略

    ### Hibernate 主键生成策略详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它极大地简化了 Java 应用程序与数据库之间的交互过程。在使用 Hibernate 进行持久化操作时,经常需要处理实体类...

    Hibernate主键生成策略

    ### Hibernate 主键生成策略详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象映射到数据库表中的记录,从而极大地简化了数据访问层的开发工作。在 Hibernate 中,...

    Hibernate中主键生成策略

    在Java的持久化框架Hibernate中,主键生成策略是一个至关重要的概念,它决定了数据库表中主键值如何自动生成。主键通常是表中唯一标识记录的一列,对于数据的完整性和一致性至关重要。以下是对Hibernate中主键生成...

    Hibernate教程02_ID生成策略

    在Java的持久化框架Hibernate中,ID生成策略是至关重要的一个环节。它是用来唯一标识数据库中每一行记录的关键部分。本教程将详细讲解Hibernate中的ID生成策略,以及如何在实际项目中灵活应用。 首先,ID生成策略是...

    Hibernate各种主键生成策略

    Hibernate各种主键生成策略详解,包括 assigned increment hilo seqhilo sequence identity native uuid foreign uuid.hex sequence-identity 等

    用hibernate形式uuid的生成算法

    这种基于时间序列和硬件信息的UUID生成策略,不仅能够保证UUID的唯一性,还能在一定程度上反映出生成UUID的时间和空间信息,对于跟踪和审计非常有帮助。 在实际应用中,`UUIDHexGenerator`类可以被集成到Hibernate...

    hibernate 主键生成策略

    ### Hibernate 主键生成策略详解 Hibernate 是一款流行的 Java 持久层框架,它提供了对象关系映射(ORM)的功能,使得 Java 开发者能够更高效地与数据库进行交互。在 Hibernate 中,主键生成策略是一项核心功能,...

    Hibernate用UUID作为主键的Demo

    "uuid2")`指定了使用uuid2生成策略,而`@GenericGenerator(name = "uuid2", strategy = "uuid2")`定义了一个名为“uuid2”的生成器,其策略为“uuid2”,这是JPA中预定义的UUID生成策略。 ### 4. UUID的生成方式 在...

    hibernate的主键生成策略

    在Hibernate中,主键生成策略是确保实体类中的主键字段具有唯一标识的关键部分。以下是对Hibernate主键生成策略的详细说明: 1. **assigned**: 这种策略要求用户在调用`save()`方法之前手动设置主键值。Hibernate...

    Java探索之Hibernate主键生成策略详细介绍

    Hibernate主键生成策略详细介绍 在Java探索中,Hibernate提供了多种主键生成策略,满足不同场景下的需求。下面是对Hibernate主键生成策略的详细介绍: 1. Increment主键生成策略 Increment主键生成策略是由...

    Hibernate主键生成方式

    在Java的持久化框架Hibernate中,主键生成策略是一个关键的概念,它决定了如何为数据库中的实体对象生成唯一的标识符(主键)。以下是关于Hibernate主键生成方式的详细说明: 1. **Identity方式**:`...

    持久化类主键生成策略+例子

    在Java的持久化框架中,如JPA(Java Persistence API)和Hibernate,主键生成策略是数据模型设计的重要部分。主键通常是表中唯一标识记录的一列或一组列,用于确保数据的完整性和唯一性。本篇文章将深入探讨JPA的4种...

    HIbernate Jpa 生成entities

    - `@GeneratedValue`: 控制主键的生成策略,如自增、UUID等。 - `@Column`: 定义字段与数据库列的映射,可设置长度、是否允许为空等属性。 - `@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany`: 描述实体...

    hibernate中自动生成主键的办法

    在Hibernate中,可以通过`&lt;generator class="uuid.hex"/&gt;`来配置一个字段使用UUID.hex作为主键生成策略。这种方式特别适用于分布式系统,因为每个UUID都是独立生成且理论上不会重复。然而,由于UUID的长度较长,可能...

Global site tag (gtag.js) - Google Analytics