【问题标题】:Can we generate primary keys automatically without JDBC queries or calls?我们可以在没有 JDBC 查询或调用的情况下自动生成主键吗?
【发布时间】:2015-10-24 13:37:21
【问题描述】:

我正在尝试在 Hibernate 中自动生成字母数字(例如 TESLA1001)主键。我目前正在使用 Oracle 数据库,因此我对 my_sequence.NEXTVAL (1002) 进行了 JDBC 调用,以增加数字并附加到前缀 (TESLA)。

我们正在考虑将 MySQL 作为一个选项,但它们不支持序列。所以我不得不重写使用 JDBC 调用存储过程的自定义 ID 生成技术。

有什么方法可以在不使用 JDBC 和数据库相关查询的情况下生成自定义主键的通用实现?因此,将来,如果我需要使用 MSSQL 测试我的应用程序,我只需要更改我的休眠配置,一切正常!

【问题讨论】:

  • 你有 MySql 的自动增量
  • 是的,但自动增量仅适用于一个表,如果您有多个表,您可以从所有涉及的所有内容中查询 last_insert_id() 或者您可以使用触发器。
  • 另外,使用存储过程来实现序列并不难,例如表序列(名称,数字)和一个过程 getNext(name) 将数字加一并返回它。

标签: java mysql oracle hibernate primary-key


【解决方案1】:

因为您需要一种方法来协调序列号,所以您必须始终使用集中式序列生成器。与 UUID 生成器相比,字母数字主键的索引性能更差。

如果我是你,我会切换到 UUID identifers,它在所有主要的 RDBMS 中都是独一无二且可移植的。

【讨论】:

    猜你喜欢
    • 2019-03-03
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多