有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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