2010-01-27 8 views
3

J'ai une table qui contient d'énormes données. Je veux ajouter le versioning hibernate automatique à cette table. Mais l'ajout d'une colonne not-null à cette table pour la gestion des versions est très coûteux en raison de l'énorme quantité de données. Existe-t-il une solution de contournement pour qu'hibernate puisse fonctionner avec une colonne nullable? Actuellement, Hibernate donne NPE parce qu'il essaie d'incrémenter une valeur nulle. (Comme Hibernate gère cela en interne, il est hors de question de changer la valeur de la version côté client) Toute autre option de versioning est la bienvenue. Merci d'avanceHibernate: Colonne Nullable Versioning automatique

Répondre

2

Si votre saveur de base de données le permet, vous pouvez utiliser l'option DEFAULT. Ceci est contre 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> 

Cependant, vous pouvez toujours vouloir comparer ses performances à un volume de données réaliste. Cela peut ne pas résoudre votre problème.

+0

merci pour la réponse. – anergy

+0

Cela ne fonctionnerait que pour Oracle 11g, où l'ajout d'une valeur par défaut est une opération à temps constant, voir http://www.dba-oracle.com/t_oracle_column_default_value.htm – Rico