0 votes

Hibernate 3.5.1, JPA2.0 & MySQL - Comportement alternatif dans 2 bases de données différentes / même serveur

J'utilise un serveur MySQL 5.1 et Hibernate 3.5.1 / JPA2 comme ORM. Tout semble correct jusqu'à ce que je supprime manuellement certaines tables. A partir de là, les tests unitaires échouent car Hibernate ne crée plus certaines tables. En changeant l'url jdbc de

url=jdbc:mysql://localhost:3306/dbjava?createDatabaseIfNotExist=true

à

url=jdbc:mysql://localhost:3306/dbjavanew?createDatabaseIfNotExist=true

résout le problème ... jusqu'à ce que j'effectue des suppressions de tables :-( Comme je vais utiliser MySQL pour la production, cela ne doit pas se produire du tout.

L'abandon de dbjava n'aide pas non plus. Avez-vous des suggestions ?

--- INFORMATIONS SUPPLÉMENTAIRES :

Ça devient vraiment fatigant. Depuis la console mysql :

mysql> use dbjava;
Database changed
mysql> show tables;
+---------------------+
| Tables_in_dbjava    |
+---------------------+
| aa                  |
| ba                  |
| da                  |
| ea                  |
| hibernate_sequences |
| ia                  |
| ka                  |
| la                  |
+---------------------+
8 rows in set (0.00 sec)
mysql> create table `cA` (id integer not null, comment varchar(255), name varchar(255), id_d integer, id_f integer, primary key (id)) ENGINE=InnoDB;
ERROR 1050 (42S01): Table 'ca' already exists

Euh ? Pourquoi la table 'ca' existe-t-elle ?!?!? En fait, elle a déjà existé ... depuis, elle a été abandonnée, toute la base de données a été abandonnée plusieurs fois ... pourquoi existe-t-elle encore ?

Encore pire :

 mysql> drop table cA;
 mysql> ERROR 1051 (42S02): Unknown table 'ca'

Totalement confus ...

Cependant, je viens de me rendre compte de quelque chose : mes noms de table dans hibernate utilisent une notation en minuscules et en majuscules (camel case). mysql ne répond qu'en minuscules. Quelqu'un pourrait-il confirmer que mysql ne reconnaît pas la sensibilité à la casse en 2010 ? !?

1voto

mindas Points 14217

Quel dialecte utilisez-vous ? Les versions plus récentes d'Hibernate (je ne me souviens pas des numéros exacts) ont un correctif pour le dialecte InnoDB : au lieu de type=InnoDb il utilise engine=InnoDb lors de la création de tables -- ce qui est la seule syntaxe légitime dans MySQL 5.1. Pour rappel, MySQL 5.0 acceptait les deux syntaxes suivantes type y engine mots-clés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X