0

我正在为 ORM 运行 MySQL 5.1 服务器和 Hibernate 3.5.1 / JPA2。在我手动删除一些表之前,一切似乎都很好。从那时起,单元测试失败,Hibernate 不再创建某些表。从更改 jdbc url

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'存在?!?!?实际上,它曾经存在过……从那以后,它被丢弃了,整个db被丢弃了几次……为什么它仍然存在?

更糟:

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

完全糊涂了……

但是,我刚刚意识到一些事情:我在休眠中的表名使用大小写(驼峰式)表示法。mysql 仅响应小写。有人会确认 mysql 在 2010 年不识别大小写吗?!?

4

1 回答 1

1

你用的是哪种方言?较新版本的 Hibernate(不记得确切的数字)具有 InnoDB 方言修复:而不是在创建表时type=InnoDb使用它engine=InnoDb——这是 MySQL 5.1 中唯一合法的语法。提醒一下,MySQL 5.0 接受了typeengine关键字。

于 2010-07-10T21:34:29.953 回答