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&amp;rewriteBatchedStatements=true&amp;useServerPstmts=true</property>

开始数据库student中并没有orders表和customer表,我希望这两个表能够在运行的时候自动创建,使用的是update

<property name="hibernate.hbm2ddl.auto">update</property>

 update   :如果数据库中没有表,创建一个新的表,如果有了,直接使用这个表.可以更新表的结构. 

数据库students中没有customer 和orders表

 但是在以前的学习中,另一个数据库bookstore中有一个同名表 orders

数据库bookstore中有同名orders表

 二、

在测试中第一次启动,出现了创建失败的错误

显示只有orders创建失败

 错误信息说:customer表没有找到,所以hibernate自动创建了Customer表,但是他却找到了存在一另一个数据库bookstore中的同名表orders,既然找到了,就没有创建orders表,但是在接下来的操作中,因为orders表在students数据库中不存在, 爆了错误。

当然,在数据库中查看也是,在students数据库中只有customer一张表

只创建成功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,你们怎么认为呢?

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值