用例是在保存新实体时,IdentityColumn 有两个选项
如果 id 列为空,则生成 auto_increment id(与
@GeneratedValue(strategy = GenerationType.IDENTITY)
完美配合
如果 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 中甚至有可能实现这个用例吗?