Domanda

Ho una tabella che contiene i dati enorme. Voglio aggiungere Hibernate versioning automatico a questa tabella. Ma l'aggiunta di una colonna non-null a questa tabella per il controllo delle versioni è molto costoso a causa di dati enorme. C'è una soluzione in modo Hibernate può lavorare con colonna Null? Attualmente hibernate dà NPE perché cerca di incrementare un valore nullo. (Come Hibernate gestisce questo internamente, cambiando il valore versione sul lato client è fuori discussione) Ogni altro startegy versioni è il benvenuto troppo. Grazie in anticipo

È stato utile?

Soluzione

Se il sapore della base di dati lo consente è possibile utilizzare l'opzione predefinita. Questo è contro Oracle ...

SQL> create table t23 as select object_id as id from user_objects;

Table created.

SQL> desc t23
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER

SQL> alter table t23 add hibernate_version_number number default 0 not null;

Table altered.

SQL> desc t23
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 HIBERNATE_VERSION_NUMBER                  NOT NULL NUMBER

SQL> select count(*) from t23 where hibernate_version_number = 0;

  COUNT(*)
----------
       504

SQL>

Tuttavia, si può ancora voglia di punto di riferimento la sua performance con un volume realistica dei dati. Esso non può risolvere il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top