只有在 hibernate 6.X 中标识列为空时,如何在 hibernate 中生成自动递增 id?

问题描述 投票:0回答:0

用例是在保存新实体时,IdentityColumn 有两个选项

  1. 如果 id 列为空,则生成 auto_increment id(与

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    完美配合
  2. 如果 id 列不为空,则不生成自动递增 id,并使用我们在保存实体时手动设置的相同 id。通过在标识列上使用以下注释,将 Hibernate 分配的生成器与标识生成器结合使用,这也可以正常工作。

    @Id
    @org.springframework.data.annotation.Id
    @GeneratedValue(strategy = GenerationType.IDENTITY,  generator = "CustomIdGenerator")
    @GenericGenerator(name = "CustomIdGenerator", strategy = "com.CustomIdentityGenerator ")
    private Long id;
    

这两个用例在 hibernate 版本 5.X 下都运行良好,代码为“CustomIdentityGenerator”

public class CustomIdentityGenerator 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 != Integer.valueOf(0) ? id : super.generate(session, object);
    }
}

但是在更新到休眠版本 6.X 后,'IdentityGenerator' 中不存在生成方法。尝试了多种方法来覆盖但没有任何效果。

在 hibernate 6.X 中甚至有可能实现这个用例吗?

java hibernate entity-framework-6
© www.soinside.com 2019 - 2024. All rights reserved.