当前位置:首页 > Java

Java 如何生成主键

2026-03-21 20:24:40Java

使用数据库自增主键

在数据库中设置主键列为自增类型(如MySQL的AUTO_INCREMENT或PostgreSQL的SERIAL)。插入数据时无需指定主键值,数据库会自动生成。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 其他字段
}

使用UUID生成主键

通过java.util.UUID生成全局唯一标识符(UUID),适用于分布式系统。

import java.util.UUID;

@Entity
public class Product {
    @Id
    private String id = UUID.randomUUID().toString();
    // 其他字段
}

使用Hibernate序列生成器

依赖数据库序列(如Oracle的SEQUENCE)生成主键,需配置GenerationType.SEQUENCE

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_gen")
    @SequenceGenerator(name = "seq_gen", sequenceName = "order_seq")
    private Long id;
    // 其他字段
}

使用时间戳或雪花算法

结合时间戳和机器标识生成唯一ID,适用于高并发场景。例如Twitter的Snowflake算法实现:

public class SnowflakeIdGenerator {
    private final long twepoch = 1288834974657L;
    private final long workerIdBits = 5L;
    private final long datacenterIdBits = 5L;
    private final long sequenceBits = 12L;

    public synchronized long nextId() {
        long timestamp = System.currentTimeMillis();
        // 实现算法逻辑
        return ((timestamp - twepoch) << 22) | (datacenterId << 17) | (workerId << 12) | sequence;
    }
}

使用Redis自增主键

通过Redis的INCR命令生成递增ID,适用于高吞吐量场景。

Jedis jedis = new Jedis("localhost");
long id = jedis.incr("global:entity_id");

使用复合主键

通过@Embeddable@EmbeddedId定义复合主键,适用于多字段联合唯一的情况。

Java 如何生成主键

@Embeddable
public class OrderPK implements Serializable {
    private String customerId;
    private String orderNumber;
}

@Entity
public class Order {
    @EmbeddedId
    private OrderPK id;
    // 其他字段
}

标签: 主键Java
分享给朋友:

相关文章

Java如何实现异步处理

Java如何实现异步处理

Java实现异步处理的方法 Java提供了多种方式实现异步处理,以下是几种常见的方法: 使用CompletableFuture CompletableFuture是Java 8引入的异步编程工具,支…

Java如何实现异步处理

Java如何实现异步处理

异步处理的实现方式 Java中实现异步处理有多种方法,包括使用多线程、Future、CompletableFuture以及响应式编程框架等。以下是几种常见的实现方式: 使用多线程 通过创建新线程执行…

shell 如何调用Java

shell 如何调用Java

在Shell中调用Java程序 通过Shell脚本调用Java程序需要确保Java环境已正确配置,并明确指定类路径或JAR文件路径。以下是具体实现方法: 检查Java环境 执行以下命令验证Java是…

Java如何添加事件

Java如何添加事件

添加事件监听器的方法 在Java中,事件监听通常用于响应用户操作(如按钮点击、键盘输入等)或系统事件。以下是几种常见的事件监听实现方式: 使用匿名内部类 button.addActionListe…

如何自学Java竞赛

如何自学Java竞赛

自学Java竞赛的步骤 明确竞赛目标和范围 确定参加的竞赛类型(如ACM、LeetCode周赛等),了解其考察重点(算法、数据结构、特定库函数)。研究往届题目和评分标准,制定针对性学习计划。 掌握核…

如何学好Java技巧

如何学好Java技巧

理解基础概念 掌握Java的核心概念是学习的基础。熟悉面向对象编程(OOP)的四大特性:封装、继承、多态和抽象。理解基本数据类型、变量、运算符、控制流程(如循环和条件语句)以及数组的使用。 实践…