De laatste keer dat ik een Oracle-database voor het systeem maakte, was de strategie om de primaire sleutel te genereren met hibernate SEQUENCE, en ik voelde me toen erg moe, want ik weet niet waarom, oracle+sequence+trigger kan de primaire sleutelwaarde niet krijgen bij het toevoegen van nieuwe data.
Deze keer richt ik me hierop, en er zijn twee nieuwe problemen,
1。 Welke winterslaapstrategie voor het genereren van primaire sleutels heeft betere prestaties;
2。 Strategieën voor primaire sleutelgeneratie zouden idealiter cross-database moeten zijn.
Iedereen praat over performance, Oracle gebruikt sequentie, dus de primaire sleutel wil nog steeds op deze manier gegenereerd worden.
Dan is er de primaire sleutel om de nieuwe data terug te geven
Inheems Kies er één van identity, sequence of hilo op basis van de mogelijkheden van de onderliggende database;
Dat wil zeggen, de primaire sleutel wordt gegenereerd, die wordt gekozen door winterslaap.
Native en Denity zijn beide strategieën voor het genereren van database-ID's serienummers: Native is Hibernate wordt automatisch geselecteerd en gegenereerd, Identity is zelfgeselecteerd, Identity is MySQL, SQL2000 en andere databasegeneratiemethoden, en er is ook een reeks die Oracle en andere generatiemethoden is, over het algemeen wordt Native automatisch geselecteerd door Hibernate
Voor databases die intern identiteitsvelden ondersteunen (DB2, MySQL, Sybase en MS SQL), kun je identiteit uit gebruiken Sleutelwoordgeneratie. Voor databases die intern sequenties ondersteunen (DB2, Oracle, PostgreSQL, Interbase, McKoi en SAP). DB), kun je een sequentie-achtige sleutelwoordgeneratie gebruiken. Beide benaderingen vereisen twee tijden om een nieuw object in te voegen SQL-query's.
Ik heb meer online informatie bekeken, ik weet niet waar ik het heb gevonden, deze strategie van primaire sleutels genereren, als het mysql is, kiest hij auto_increment manier om de primaire sleutel te genereren; Als het Oracle is, kiest hij de sequentiemethode; Het is alleen zo dat je bij het gebruik van de Oracle-database een hibernate_sequence moet aanmaken, die gereserveerd is door Hibernate en een foutmelding geeft als je het niet bouwt (getest). |