Hibernate 3.5.1, JPA2.0 и MySQL - альтернативное поведение в пределах 2 diff dbs / тот же сервер - PullRequest
0 голосов
/ 11 июля 2010

Я использую сервер MySQL 5.1 и Hibernate 3.5.1 / JPA2 для ORM. Все будет хорошо, пока я не урону некоторые таблицы вручную. С этого момента модульные тесты не выполняются, и Hibernate больше не создает определенные таблицы. Изменение URL-адреса JDBC с

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

до

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

решает проблему ... пока я не выполню несколько операций по удалению таблиц :-( Так как я собираюсь использовать MySQL для производства, это не должно происходить вообще.

Удаление dbjava тоже не помогает. Есть предложения?

--- ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Это становится действительно утомленным. Из консоли 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

Мм? Почему существует таблица 'ca'?!?!? На самом деле, он когда-то существовал ... с тех пор он был отброшен, весь БД был сброшен несколько раз ... почему он все еще существует?

Еще хуже:

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

Совершенно смущен ...

Однако я кое-что понял: в именах таблиц в спящем режиме используются строчные и прописные буквы (верблюжьи). mysql ответы только в нижнем регистре. Кто-нибудь подтвердит, что mysql не распознает чувствительность к регистру в 2010 году?!?

1 Ответ

1 голос
/ 11 июля 2010

Какой диалект вы используете? В более новых версиях Hibernate (точных чисел не помню) есть исправление диалекта InnoDB: вместо type=InnoDb при создании таблиц используется engine=InnoDb, что является единственным допустимым синтаксисом в MySQL 5.1. Напомним, что MySQL 5.0 поддерживает ключевые слова type и engine.

...