【问题标题】:Replace @SequenceGenerator since its deprecated替换@SequenceGenerator,因为它已被弃用
【发布时间】:2017-02-13 03:20:08
【问题描述】:

@SequenceGenerator 有问题:

@SequenceGenerator(name="pk_user_id", sequenceName="seq_user_id", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="pk_user_id")

应用程序启动时会显示警告:

WARN 7388 --- [main] org.hibernate.orm.deprecation : HHH90000014: 发现使用了已弃用的 [org.hibernate.id.SequenceHiLoGenerator] 基于序列的 id 生成器;改用 org.hibernate.id.enhanced.SequenceStyleGenerator。有关详细信息,请参阅 Hibernate 域模型映射指南

我试图找出如何用新代码替换已弃用的代码,但找不到任何解决方案。

【问题讨论】:

    标签: java hibernate sequence-generators


    【解决方案1】:

    根据警告消息和 Hibernate 文档 (Hibernate deprecated list),您应该使用 SequenceStyleGenerator。或者更好地使用@GenericGenerator 并指定生成器策略。

    下面是一个典型的用法示例:
    @GenericGenerator(
            name = "wikiSequenceGenerator",
            strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
            parameters = {
                    @Parameter(name = "sequence_name", value = "WIKI_SEQUENCE"),
                    @Parameter(name = "initial_value", value = "1000"),
                    @Parameter(name = "increment_size", value = "1")
            }
    )
    @Id
    @GeneratedValue(generator = "wikiSequenceGenerator")
    

    【讨论】:

    • 如果注释来自 JPA 怎么办?
    • 如果使用 Hibernate 4,可以在不更改代码 properties.put("hibernate.id.new_generator_mappings", "true"); 的情况下更改属性(请参阅 Vlad Mihalcea blog)。然而,hibernate 5 默认使用增强的生成器,因此不需要该属性。
    • 那些新的序列生成器正在使用 optimisers,默认是 pooled 一个,如果这有问题,你仍然可以通过使用以前的算法来避免问题,如果你设置休眠以使用 hi/lo 优化器,例如设置properties.put("hibernate.id.optimizer.pooled.preferred", "hilo");。好处仍然是使用 JPA 注释的代码没有变化。
    • 如果升级到 Spring Boot 1.4.x,请查看this
    • 嗨,新的 wikiSequenceGenerator 中的 allocationSize 是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多