java - JPA:覆盖自动生成的 ID

标签 java hibernate jpa

<分区>

我在 Employee 类中有以下定义

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "employee_id")
private Integer employeeId;

现在我想导入具有现有员工 ID 的现有员工。即使我在保存之前设置了员工 ID,分配的 ID 也会被忽略,并存储自动递增的 ID。我们如何覆盖它?

我对复合键 有类似的问题,这已得到解释 here

最佳答案

我编写了自己的生成器来解决这个问题。

public class UseExistingIdOtherwiseGenerateUsingIdentity extends IdentityGenerator {

    @Override
    public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
        Serializable id = session.getEntityPersister(null, object).getClassMetadata().getIdentifier(object, session);
        return id != null ? id : super.generate(session, object);
    }
}

并像这样使用它:(替换包名)

@Id
@GenericGenerator(name = "UseExistingIdOtherwiseGenerateUsingIdentity", strategy = "{package}.UseExistingIdOtherwiseGenerateUsingIdentity")
@GeneratedValue(generator = "UseExistingIdOtherwiseGenerateUsingIdentity")
@Column(unique = true, nullable = false)
protected Integer id;

关于java - JPA:覆盖自动生成的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11667929/

相关文章:

java - 多个线程编辑 ArrayList 及其对象

java - Hibernate关系一对一

mysql - 使用 Spring Data JPA 获取两个日期之间的记录

java - Swing JScrollPane 溢出

Java:单台 PC 上出现奇怪的字符串/整数错误

java - 事务回滚后oracle undo sequence会增加吗?

Spring Boot 访问 H2 控制台

java - 在 hibernate 中加入复合主键的某个属性

java - 搜索java swing日历约会组件

java - 监控 Hibernate 缓存使用情况的工具