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 是一款开源的对象关系映射 (ORM) 框架,它极大地简化了 Java 应用程序与数据库之间的交互过程。在使用 Hibernate 进行持久化操作时,经常需要处理实体类...
### Hibernate 主键生成策略详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象映射到数据库表中的记录,从而极大地简化了数据访问层的开发工作。在 Hibernate 中,...
在Java的持久化框架Hibernate中,主键生成策略是一个至关重要的概念,它决定了数据库表中主键值如何自动生成。主键通常是表中唯一标识记录的一列,对于数据的完整性和一致性至关重要。以下是对Hibernate中主键生成...
在Java的持久化框架Hibernate中,ID生成策略是至关重要的一个环节。它是用来唯一标识数据库中每一行记录的关键部分。本教程将详细讲解Hibernate中的ID生成策略,以及如何在实际项目中灵活应用。 首先,ID生成策略是...
Hibernate各种主键生成策略详解,包括 assigned increment hilo seqhilo sequence identity native uuid foreign uuid.hex sequence-identity 等
这种基于时间序列和硬件信息的UUID生成策略,不仅能够保证UUID的唯一性,还能在一定程度上反映出生成UUID的时间和空间信息,对于跟踪和审计非常有帮助。 在实际应用中,`UUIDHexGenerator`类可以被集成到Hibernate...
### Hibernate 主键生成策略详解 Hibernate 是一款流行的 Java 持久层框架,它提供了对象关系映射(ORM)的功能,使得 Java 开发者能够更高效地与数据库进行交互。在 Hibernate 中,主键生成策略是一项核心功能,...
"uuid2")`指定了使用uuid2生成策略,而`@GenericGenerator(name = "uuid2", strategy = "uuid2")`定义了一个名为“uuid2”的生成器,其策略为“uuid2”,这是JPA中预定义的UUID生成策略。 ### 4. UUID的生成方式 在...
在Hibernate中,主键生成策略是确保实体类中的主键字段具有唯一标识的关键部分。以下是对Hibernate主键生成策略的详细说明: 1. **assigned**: 这种策略要求用户在调用`save()`方法之前手动设置主键值。Hibernate...
Hibernate主键生成策略详细介绍 在Java探索中,Hibernate提供了多种主键生成策略,满足不同场景下的需求。下面是对Hibernate主键生成策略的详细介绍: 1. Increment主键生成策略 Increment主键生成策略是由...
在Java的持久化框架Hibernate中,主键生成策略是一个关键的概念,它决定了如何为数据库中的实体对象生成唯一的标识符(主键)。以下是关于Hibernate主键生成方式的详细说明: 1. **Identity方式**:`...
在Java的持久化框架中,如JPA(Java Persistence API)和Hibernate,主键生成策略是数据模型设计的重要部分。主键通常是表中唯一标识记录的一列或一组列,用于确保数据的完整性和唯一性。本篇文章将深入探讨JPA的4种...
- `@GeneratedValue`: 控制主键的生成策略,如自增、UUID等。 - `@Column`: 定义字段与数据库列的映射,可设置长度、是否允许为空等属性。 - `@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany`: 描述实体...
在Hibernate中,可以通过`<generator class="uuid.hex"/>`来配置一个字段使用UUID.hex作为主键生成策略。这种方式特别适用于分布式系统,因为每个UUID都是独立生成且理论上不会重复。然而,由于UUID的长度较长,可能...