JavaHibernate3.5.1,JPA2。0和MySQL在2个不同dbs/相同服务器中的替代行为
我正在运行MySQL 5.1服务器和Hibernate 3.5.1/JPA2 for ORM。在我手动放下一些桌子之前,一切似乎都很好。从那时起,单元测试失败,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”存在?!?!?事实上,它曾经存在过。。。从那以后,它被删除了,整个数据库被删除了好几次。。。为什么它仍然存在
更糟糕的是:
mysql> drop table cA;
mysql> ERROR 1051 (42S02): Unknown table 'ca'
完全困惑
然而,我刚刚意识到:我在hibernate中的表名使用小写和大写(驼峰大小写)表示法。mysql响应仅小写。有人会确认mysql在2010年不承认案例敏感性吗强>
# 1 楼答案
你用哪种方言?Hibernate的较新版本(记不清确切的数字)有InnoDB方言修复:它在创建表时使用
engine=InnoDb
而不是type=InnoDb
,这是MySQL 5.1中唯一合法的语法。提醒一下,MySQL 5.0接受了type
和engine
关键字