oracle使用hibernate不能自动建表

本文介绍了一个Hibernate在动态生成表时遇到的问题,特别是在配置为update模式下,部分表未能正确生成,而其他表则生成成功。文章详细分析了错误原因,并提供了解决方案,即通过指定默认模式来避免跨用户空间查找已存在的表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在项目中使用hibernate的动态生成表,即将hbm2ddl.auto配置成update时,发现hibernate并没有按照默认的生成规则生成相应的数据表信息。但奇怪的是,只是部分表没有生成,而其它的表即生成成功了。重新启动项目,发现问题依旧。奇怪的是,虽然有些表没有生成,但它相关联的关联表即生成了,而且在生成时,会报一个找不到相关的引用表的错误。报的错误如下:

2014-09-28 01:25:56 [org.hibernate.tool.hbm2ddl.SchemaUpdate]-[ERROR] Unsuccessful: alter table r_role_x_menu add constraint FK474DC862E1A553E2 foreign key (menu_id) references p_menu
2014-09-28 01:25:56 [org.hibernate.tool.hbm2ddl.SchemaUpdate]-[ERROR] ORA-00942: 表或视图不存在

找了半天,最后发现一个问题,即这里需要引用的表p_menu在另一个用户空间里已经存在了,而hibernate在创建表时,在另一个用户空间中找到了这个表,故不再在当前的用户空间中创建这个表了。而在创建关联表时,由于关联的是本用户空间的表,故有此错误。
hibernate使用了jdbc默认的databasemeta来寻找相应表数据信息,当使用默认的配置时,由于某种原因(并不是每次都能发生,取决于数据库本身以及相应的驱动)。当使用当前用户连接到数据库时,使用databasemeta寻找数据库表信息时,会查询出其它用户的数据表信息(即使当前用户没有相应的权限)。
解决此问题的方法很简单,只需要在hibernate.cfg.xml中配置一句:

<property name="default_schema">当前连接用户</property>

查看原文

### Flowable 自动数据库配置及原理 #### 数据库模式更新机制 当 `database-schema-update` 被设置为 `true` 时,每次应用程序启动时,Flowable 将自动检查数据库中的是否存在以及是否需要进行更新[^1]。这意味着如果检测到现有结构不符合当前版本的要求,则会尝试对其进行升级。 对于新安装的应用程序而言,如果没有找到任何预定义的流程引擎,Flowable 还能够依据所选的数据源类型(如 MySQL、PostgreSQL 或 Oracle),自动生成所需的初始架构并完成初始化操作[^3]。 #### 单键字段的作用 特别值得注意的是,在涉及业务单处理的情况下,存在名为 `FORM_KEY_` 的特殊列用来存储与特定任务实例相联结的外部单资源标识符[^2]。这使得开发者可以在运行期间动态加载不同的用户界面组件来支持多样化的交互需求。 #### 实现方式概览 为了实现上述功能,通常会在 Spring Boot 应用程序上下文中通过属性文件或环境变量的形式指定必要的参数: ```properties # application.properties 文件片段 spring.datasource.url=jdbc:mysql://localhost:3306/flowabledb?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password spring.jpa.hibernate.ddl-auto=update flowable.database-schema-update=true ``` 以上配置项告知框架连接至目标关系型数据库,并允许其按照内部规则调整物理模型布局;同时启用了 Flowable 提供的过程管理服务及其内置的对象持久化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值