当前位置: 首页 > 知识库问答 >
问题:

对于主要数据库,“GenerationType.Auto”实际上选择了什么策略?

祝高超
2023-03-14

Hibernate文档(5.1.2.2.Identifier generator)状态

但是我找不到文档/概述,在将特定数据库定义为GenerationType.auto时,@GeneratedValue策略用于这些数据库。

有人知道是否有人为主要数据库(例如Oracle、DB2、PostgreSQL、MySQL、MSSQL、…)维护了实际生成策略的列表吗?到哪里去找?

共有1个答案

鞠凌龙
2023-03-14

这个链接是关于Java持久性API的,似乎定期更新。http://en.wikibooks.org/wiki/java_persistence/identity_and_sequencing

标识排序使用数据库中的特殊标识列,以允许数据库在插入对象行时自动为其分配id。许多数据库都支持标识列,例如MySQL、DB2、SQL Server、Sybase和PostgreSQL。Oracle不支持标识列,但可以使用序列对象和触发器模拟标识列。

序列对象使用特殊的数据库对象生成IDS。序列对象只在某些数据库中支持,如Oracle、DB2和Postgres。通常,序列对象具有名称、增量和其他数据库对象设置。每次选择。NextVal时,序列将按增量递增。

如果数据库(如DB2)同时支持标识列和序列,hibernate选择标识列,请参见方言:

public Class getNativeIdentifierGeneratorClass() {
    if ( supportsIdentityColumns() ) {
        return IdentityGenerator.class;
    }
    else if ( supportsSequences() ) {
        return SequenceGenerator.class;
    }
    else {
        return TableHiLoGenerator.class;
    }
}

通过查看org.hibernate.diange包中的相关方言,可以检查从每个数据库的supportsIdentityColumns()和supportsSequences()返回的内容。

 类似资料:
  • 问题内容: 在Hibernate的单证(5.1.2.2。标识符生成器)状态 AUTO:根据基础数据库的功能选择IDENTITY,SEQUENCE或TABLE。 但是,当将特定数据库定义为GenerationType.AUTO时,我无法找到文档/概述用于特定数据库的@GeneratedValue策略。 是否有人知道是否维护着主要数据库(例如Oracle,DB2,PostgreSQL,MySQL,MS

  • 问题内容: 最近几天,我试图学习如何通过Java访问mySQL数据库。我能够加载驱动程序并获得与数据库的连接(至少我认为是这样,因为那里没有异常。) 代码是: 当我执行它时,它说: 驱动程序已加载… 连接成功… 数据库-ConnectionError:java.sql.SQLException:[MySQL] [ODBC 5.2(w)驱动程序] [mysqld-5.5.31]未选择数据库 我真的不

  • commitsync是像JavaDoc声称的那样提交了“在最后一次轮询()上返回的偏移量”(这可能会遗漏一些没有包含在最后一次结果中的分区),还是实际上提交了所有订阅分区的最新位置?考虑到:https://github.com/apache/kafka/blob/2.4.0/clients/src/main/java/org/apache/kafka/clients/consumer/kafkac

  • 问题内容: 我知道Javassist是一个Java库,提供了一种操作应用程序的Java字节码的方法。 好的,但是为什么我们需要操纵字节码? 有什么真实的例子吗?任何真正的应用程序,javassist在哪里使用? 问题答案: 一个常见的应用是在运行时生成代理类,即在运行时创建一个子类,以拦截所有方法调用。例子: Hibernate 使用代理来拦截对实体的方法调用以实现延迟加载,即,在首次访问对象时从

  • 从文档中可以看出,-Xss用于设置JVM的堆栈大小。但我对这一说法感到非常困惑。 在Java中,每个线程都有自己的堆栈。-Xss指定的数字是否: > 线程的每个堆栈的大小。e、 如果将-Xss设置为256K,则每个线程将有一个256K大的堆栈。因此,10个线程将总共使用2560K。 非常感谢你。 编辑: 谢谢你的回答。看起来像是上面的(2)senario-Xss指定特定线程的最大堆栈大小。 然后我

  • 主要内容:所需步骤,示例代码在本教程将演示如何在JDBC应用程序中选择一个数据库。 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中创建数据库。 要执行以下示例,需要用实际用户名和密码替换这里用户名()和密码()。 MySQL或数据库已启动并运行。 所需步骤 使用JDBC应用程序选择数据库需要以下步骤: 导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用就足够了。