hibernate会错误的找到未指定的数据库中的表 hibernate3.6.10的bug?
在学习hibernate中,发现了一个可能是hibernate-3.6.10中存在的问题
问题概述:当指定使用的数据库 X 中没有找到hibernate配置的表 b 的时候,hibernate会在其他数据库中寻找, 若在其他数据库 Y 中找到了同名表 b , 会导致在创建表 b 的时候创建失败。
这是一个很奇怪的问题。
演示测试:
一、
我所指定的数据库是students
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/students?serverTimezone=UTC&rewriteBatchedStatements=true&useServerPstmts=true</property>
开始数据库student中并没有orders表和customer表,我希望这两个表能够在运行的时候自动创建,使用的是update
<property name="hibernate.hbm2ddl.auto">update</property>
update :如果数据库中没有表,创建一个新的表,如果有了,直接使用这个表.可以更新表的结构.
但是在以前的学习中,另一个数据库bookstore中有一个同名表 orders
二、
在测试中第一次启动,出现了创建失败的错误
错误信息说:customer表没有找到,所以hibernate自动创建了Customer表,但是他却找到了存在一另一个数据库bookstore中的同名表orders,既然找到了,就没有创建orders表,但是在接下来的操作中,因为orders表在students数据库中不存在, 爆了错误。
当然,在数据库中查看也是,在students数据库中只有customer一张表
三、
当然还是有比较好的解决办法的,比如手动在数据库中创建一个名为orders的表,可以只包含一个字段
CREATE TABLE orders
( oid CHAR(35) PRIMARY KEY)
这样再一次启动的时候,hibernate再去其他数据库中寻找名为orders 的表,不会出现创建失败的情况
11:37:27,405 INFO SchemaUpdate:155 - Running hbm2ddl schema update
11:37:27,405 INFO SchemaUpdate:167 - fetching database metadata
11:37:27,419 INFO SchemaUpdate:179 - updating schema
11:37:27,549 INFO TableMetadata:65 - table found: students.customer
11:37:27,549 INFO TableMetadata:66 - columns: [cname, cid]
11:37:27,549 INFO TableMetadata:68 - foreign keys: []
11:37:27,549 INFO TableMetadata:69 - indexes: [primary]
11:37:27,583 INFO TableMetadata:65 - table found: bookstore.orders
11:37:27,583 INFO TableMetadata:66 - columns: [uid, total, address, oid, state, ordertime]
11:37:27,583 INFO TableMetadata:68 - foreign keys: [orders_ibfk_1]
11:37:27,583 INFO TableMetadata:69 - indexes: [uid, primary]
11:37:28,319 INFO SchemaUpdate:217 - schema update complete
Process finished with exit code 0
四、
我觉得这是hibernate-3.6.10的bug,你们怎么认为呢?