Heim Datenbank MySQL-Tutorial Hibernate各种主键生成策略与配置详解

Hibernate各种主键生成策略与配置详解

Jun 07, 2016 pm 05:07 PM
hibernate

1、assigned 主键由外部程序负责生成,在 save() 之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无

1assigned

主键由外部程序负责生成,在 save() 之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无关,可以跨数据库。在存储对象前,必须要使用主键的setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免。

ud”是自定义的策略名,人为起的名字,后面均用“ud”表示。

特点:可以跨数据库,人为控制主键生成,应尽量避免。

2increment

Hibernate从数据库中取出主键的最大值(每个session只取1次),以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库。

Hibernate调用org.hibernate.id.IncrementGenerator类里面的generate()方法,使用select max(idColumnName) from tableName语句获取主键最大值。该方法被声明成了synchronized,所以在一个独立的Java虚拟机内部是没有问题的,然而,在多个JVM同时并发访问数据库select max时就可能取出相同的值,再insert就会发生Dumplicate entry的错误。所以只能有一个Hibernate应用进程访问数据库,否则就可能产生主键冲突,所以不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于群集环境。

官方文档:只有在没有其他进程往同一张表中插入数据时才能使用,在集群下不要使用。

特点:跨数据库,不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于群集环境。

3hilo

hilo(高低位方式high low)是hibernate中最常用的一种生成方式,需要一张额外的表保存hi的值。保存hi值的表至少有一条记录(只与第一条记录有关),否则会出现错误。可以跨数据库。

hibernate_hilo

next_hi

100

hibernate_hilo 指定保存hi值的表名

next_hi 指定保存hi值的列名

100 指定低位的最大值

也可以省略tablecolumn配置,其默认的表为hibernate_unique_key,列为next_hi

100

hilo生成器生成主键的过程(以hibernate_unique_key表,next_hi列为例):

1. 获得hi值:读取并记录数据库的hibernate_unique_key表中next_hi字段的值,数据库中此字段值加1保存。

2. 获得lo值:从0max_lo循环取值,差值为1,当值为max_lo值时,重新获取hi值,然后lo值继续从0max_lo循环。

3. 根据公式 hi * (max_lo + 1) + lo计算生成主键值。

注意:当hi值是0的时候,那么第一个值不是0*(max_lo+1)+0=0,而是lo跳过01开始,直接是123……

max_lo配置多大合适呢?

这要根据具体情况而定,如果系统一般不重启,而且需要用此表建立大量的主键,可以吧max_lo配置大一点,这样可以减少读取数据表的次数,提高效率;反之,如果服务器经常重启,可以吧max_lo配置小一点,可以避免每次重启主键之间的间隔太大,造成主键值主键不连贯。

特点:跨数据库,hilo算法生成的标志只能在一个数据库中保证唯一。

4seqhilo

hilo类似,通过hi/lo算法实现的主键生成机制,只是将hilo中的数据表换成了序列sequence,需要数据库中先创建sequence,适用于支持sequence的数据库,如Oracle

hibernate_seq

100

特点:与hilo类似,只能在支持序列的数据库中使用。

5sequence

采用数据库提供的sequence机制生成主键,需要数据库支持sequence。如oralceDBSAP DBPostgerSQLMcKoi中的sequenceMySQL这种不支持sequence的数据库则不行(可以使用identity)。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So integrieren Sie Hibernate in ein SpringBoot-Projekt So integrieren Sie Hibernate in ein SpringBoot-Projekt May 18, 2023 am 09:49 AM

Hibernate in das SpringBoot-Projekt integrieren Vorwort Hibernate ist ein beliebtes ORM-Framework (Object Relational Mapping), das Java-Objekte Datenbanktabellen zuordnen kann, um Persistenzvorgänge zu erleichtern. Im SpringBoot-Projekt kann uns die Integration von Hibernate dabei helfen, Datenbankoperationen einfacher durchzuführen. In diesem Artikel wird die Integration von Hibernate in das SpringBoot-Projekt vorgestellt und entsprechende Beispiele bereitgestellt. 1.Abhängigkeiten einführenFügen Sie die folgenden Abhängigkeiten in die Datei pom.xml ein: org.springframework.bootspring-boot-starter-data-jpam

Java-Fehler: Ruhezustandsfehler, wie man damit umgeht und sie vermeidet Java-Fehler: Ruhezustandsfehler, wie man damit umgeht und sie vermeidet Jun 25, 2023 am 09:09 AM

Java ist eine objektorientierte Programmiersprache, die im Bereich der Softwareentwicklung weit verbreitet ist. Hibernate ist ein beliebtes Java-Persistenz-Framework, das eine einfache und effiziente Möglichkeit bietet, die Persistenz von Java-Objekten zu verwalten. Während des Entwicklungsprozesses treten jedoch häufig Hibernate-Fehler auf, die dazu führen können, dass das Programm abnormal beendet wird oder instabil wird. Der Umgang mit und die Vermeidung von Hibernate-Fehlern ist zu einer Fähigkeit geworden, die Java-Entwickler beherrschen müssen. In diesem Artikel werden einige gängige Hib vorgestellt

Was sind die Unterschiede zwischen Hibernate und Mybatis? Was sind die Unterschiede zwischen Hibernate und Mybatis? Jan 03, 2024 pm 03:35 PM

Die Unterschiede zwischen Hibernate und Mybatis: 1. Implementierungsmethode; 3. Vergleich der Objektverwaltung; Detaillierte Einführung: 1. Implementierungsmethode: Hibernate ist eine vollständige Objekt-/Relational-Mapping-Lösung, die Objekte Datenbanktabellen zuordnet, während MyBatis von Entwicklern das manuelle Schreiben von SQL-Anweisungen und ResultMap erfordert. 2. Leistung: Hibernate ist in Bezug auf die Entwicklungsgeschwindigkeit schneller MyBatis, weil Hibernate die DAO-Ebene usw. vereinfacht.

Was ist die Zuordnungsmethode für Eins-zu-Viele- und Viele-zu-Viele-Beziehungen in Java Hibernate? Was ist die Zuordnungsmethode für Eins-zu-Viele- und Viele-zu-Viele-Beziehungen in Java Hibernate? May 27, 2023 pm 05:06 PM

Hibernate ist ein hervorragendes ORM-Framework, das den Datenzugriff zwischen Java-Anwendungen und relationalen Datenbanken vereinfacht. In Hibernate können wir Eins-zu-Viele- und Viele-zu-Viele-Beziehungen verwenden, um komplexe Datenmodelle zu verarbeiten. Die Eins-zu-Viele-Beziehung von Hibernate In Hibernate bedeutet eine Eins-zu-Viele-Beziehung, dass eine Entitätsklasse mehreren anderen Entitätsklassen entspricht. Beispielsweise kann eine Bestellung mehreren Bestellpositionen (OrderItem) entsprechen, und ein Benutzer (User) kann mehreren Bestellungen (Order) entsprechen. Um eine Eins-zu-Viele-Beziehung in Hibernate zu implementieren, müssen Sie in der zu speichernden Entitätsklasse ein Sammlungsattribut definieren

Wie führe ich Masseneinfügungsaktualisierungsvorgänge im Ruhezustand durch? Wie führe ich Masseneinfügungsaktualisierungsvorgänge im Ruhezustand durch? Aug 27, 2023 pm 11:17 PM

In diesem Artikel erfahren Sie, wie Sie Masseneinfügungen/-aktualisierungen im Ruhezustand durchführen. Wann immer wir eine SQL-Anweisung ausführen, führen wir dies durch einen Netzwerkaufruf an die Datenbank durch. Wenn wir nun 10 Einträge in die Datenbanktabelle einfügen müssen, müssen wir 10 Netzwerkaufrufe durchführen. Stattdessen können wir Netzwerkaufrufe mithilfe der Stapelverarbeitung optimieren. Durch die Stapelverarbeitung können wir eine Reihe von SQL-Anweisungen in einem einzigen Netzwerkaufruf ausführen. Um dies zu verstehen und umzusetzen, definieren wir unsere Entität: @EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)

Einführung in das Hibernate-Framework in der Java-Sprache Einführung in das Hibernate-Framework in der Java-Sprache Jun 10, 2023 am 11:35 AM

Hibernate ist ein Open-Source-ORM-Framework, das die Datenzuordnung zwischen relationalen Datenbanken und Java-Programmen miteinander verbindet und so Entwicklern den Zugriff auf Daten in der Datenbank erleichtert. Die Verwendung des Hibernate-Frameworks kann den Aufwand beim Schreiben von SQL-Anweisungen erheblich reduzieren und die Entwicklungseffizienz und Wiederverwendbarkeit von Anwendungen verbessern. Lassen Sie uns das Hibernate-Framework unter folgenden Gesichtspunkten vorstellen. 1. Vorteile des Hibernate-Frameworks: objektrelationale Zuordnung, Ausblenden von Datenbankzugriffsdetails, Ermöglichen der Entwicklung

Vertiefendes Verständnis des Java-Framework-Technologie-Stacks: Entdecken Sie gängige Java-Frameworks wie Spring MVC, Hibernate, MyBatis usw. Vertiefendes Verständnis des Java-Framework-Technologie-Stacks: Entdecken Sie gängige Java-Frameworks wie Spring MVC, Hibernate, MyBatis usw. Dec 26, 2023 pm 12:50 PM

Java-Framework-Technologie-Stack: Einführung häufig verwendeter Java-Frameworks wie SpringMVC, Hibernate, MyBatis usw. Mit der kontinuierlichen Entwicklung von Java wurden immer mehr Frameworks entwickelt, um den Entwicklungsprozess zu vereinfachen. Unter ihnen sind SpringMVC, Hibernate, MyBatis usw. eines der am häufigsten verwendeten Frameworks in der Java-Entwicklung. In diesem Artikel werden die grundlegenden Konzepte und die Verwendung dieser Frameworks vorgestellt, um den Lesern zu helfen, diese Frameworks besser zu verstehen und anzuwenden. Lassen Sie uns zunächst Sp vorstellen

Wie funktioniert der Second-Level-Cache von Hibernate? Wie funktioniert der Second-Level-Cache von Hibernate? Sep 14, 2023 pm 07:45 PM

Caching trägt dazu bei, Datenbanknetzwerkaufrufe beim Ausführen von Abfragen zu reduzieren. Cache- und Sitzungsverknüpfung der Ebene 1. Es wird implizit implementiert. Der Cache der ersten Ebene existiert, bis das Sitzungsobjekt existiert. Sobald das Sitzungsobjekt beendet/geschlossen ist, sind keine zwischengespeicherten Objekte mehr vorhanden. Der Cache der zweiten Ebene funktioniert für mehrere Sitzungsobjekte. Es ist mit der Session Factory verknüpft. Cache-Objekte der zweiten Ebene stehen allen Sitzungen über eine einzige Sitzungsfabrik zur Verfügung. Diese Cache-Objekte werden beendet, wenn eine bestimmte Sitzungsfabrik geschlossen wird. Um den Second-Level-Cache zu implementieren, müssen wir die folgenden Abhängigkeiten hinzufügen, um den Second-Level-Cache zu verwenden. <!--https://mvnrepository.com/artifact/net.sf.ehcache/ehcache--><de

See all articles