当前位置: 首页 > 面试题库 >

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

龙晟睿
2023-03-14
问题内容

在Hibernate的单证(5.1.2.2。标识符生成器)状态

AUTO:根据基础数据库的功能选择IDENTITY,SEQUENCE或TABLE。

但是,当将特定数据库html" target="_blank">定义为GenerationType.AUTO时,我无法找到文档/概述用于特定数据库的@GeneratedValue策略。

是否有人知道是否维护着主要数据库(例如Oracle,DB2,PostgreSQL,MySQL,MSSQL等)的实际生成策略列表?在哪里找到它?


问题答案:

该链接是关于Java Persistence API的,并且似乎定期更新。
http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing

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

序列对象

序列对象使用特殊的数据库对象来生成ID。仅某些数据库(例如 Oracle,DB2和Postgres)
支持序列对象。通常,SEQUENCE对象具有名称,INCREMENT和其他数据库对象设置。每次选择.NEXTVAL时,序列都会增加INCREMENT。

编辑

如果诸如DB2之类的数据库同时支持IDENTITY列,并且“hibernate”序列选择“身份”列,请参见Dialect:

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

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



 类似资料:
  • Hibernate文档(5.1.2.2.Identifier generator)状态 但是我找不到文档/概述,在将特定数据库定义为GenerationType.auto时,@GeneratedValue策略用于这些数据库。 有人知道是否有人为主要数据库(例如Oracle、DB2、PostgreSQL、MySQL、MSSQL、…)维护了实际生成策略的列表吗?到哪里去找?

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

  • 作为 RIA 工程师,在日常工作中调试各种页面内 BUG 已经是家常便饭,随着 AJAX 技术的盛行,现在出现了众多值得称道调试的工具: 分析 DOM 结构、CSS 及 Javascript 调试:FireBug(Firefox),IE WebDeveloper(IE)、Microsoft Script Editor 等 网络抓包工具:HttpWacth(强力推荐,V6.0+ 已经同时支持 IE

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

  • 随着互联网技术的高速发展,预计2020 年底全世界网民的数量将达到 50 亿。网民数量的增加带动了网上购物、微博,网络视频等产业的发展。那么,随之而来的就是庞大的网络数据量。 大量的数据正在不断产生,那么如何安全有效地存储、检索,管理它们呢?于是对数据的有效存储、高效访问、方便共享和安全控制等问题成为了信息时代一个非常重要的问题。 使用数据库可以高效且条理分明地存储数据,它使人们能够更加迅速和方便

  • 问题内容: 对于JPA / Hibernate复合主键,@ IdClass或@EmbeddedId实现,哪个更好?为什么? 这是一个天真的问题。我决定使用@EmbeddedId(无论出于何种原因),我觉得我做错了选择。取消引用包含列属性的EmbeddedId是多余的,并且在编码时很容易出错。 还有其他理由支持和/或反对吗?是JPA(规范)的建议吗? 问题答案: 正如Pascal所写,这是答案的一部