SchemaUpdate 如何让它正确找schema?

本文记录了在Oracle9i中使用Hibernate进行SchemaUpdate时遇到的问题。具体表现为,当数据库实例中有多个用户(如CS和TEST)且这些用户下存在同名表时,SchemaUpdate会错误地匹配到其他用户的表,导致表结构更新混乱。
DB:oracle 9i
在同一个数据库实例里面有两个用户:CS 和TEST ,为了测试两个用户下面建了很多同名的表,比如cs.card和test.card表。
我用test用户连接db调用SchemaUpdate 发现竟然去找的cs下面的表,然后更新表结构就更是不知道更新到哪个schema去了。后面发现可以设置hibernate.default_schema=test,但是去匹配的表还是 cs下面的表,而去更新的确实test下面的表,真晕。
ant结果如下:
[quote]
[schemaupdate] 信息: table found: CS.CARD
[schemaupdate] 2007-3-30 13:32:12 org.hibernate.tool.hbm2ddl.TableMetadata <init>
[schemaupdate] 信息: columns: [times_y, distrustful_times, card_limit, owe_amount, id, card_number, monthly_pay, id_type, customer_id, correct_percent_hy, limit_use_pecent_y, last_adjust_date, record_date, amount_y, daily_balance_y, open_date, card_class, distrustful_amount, owe_times, correct_amount_y, correct_percent_y, times_hy, customr_limit, amount_hy, correct_amount_hy, limit_use_pecent_hy, state, daily_balance_hy]
...
[schemaupdate] alter table TEST.CARD add ACCOUNT_LIMIT double precision default 0 not null
[/quote]
事实上TEST.CARD 表里面ACCOUNT_LIMIT 已经存在,CS.CARD里面确实还没有ACCOUNT_LIMIT

问题参考:http://forum.hibernate.org/viewtopic.php?t=972447&sid=a5e67497d46c525eaf1e766f64062fbb
[quote]

I'm trying to create a schema upgrade script via HBM2DDL and I'm running into an anomaly. When the tool looks up a table in the Oracle catalog, it doesn't specify the "owner" or "schema" name (the user id that I specified in the JDBC connection parms). It finds the first table with a matching name and creates SQL Alter Table stmts accordingly. Unfortunately, the table names as specified in my HBM files occur many times within my Oracle instance, under many different User IDs. Sometimes it finds the correct table but most times it encounters the wrong table.

Is there a parameter I can specify that would limit the tool to finding only tables owned by a specific User ?

I'm using the tool from within an ANT target on Widows XP.
[/quote]
.nbcio.modules.flowable.flow.FlowableConfig:49 - ╔══════════════════════════════════════════╗ 2025-09-03 15:09:14.749 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:50 - ║ 正在配置Flowable引擎 (v6.7.2) 2025-09-03 15:09:14.749 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:51 - ║ Spring Boot版本: 2.4.x 2025-09-03 15:09:14.749 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:52 - ╚══════════════════════════════════════════╝ 2025-09-03 15:09:14.750 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:59 - ✅ 数据源和事务管理器已正确注入 2025-09-03 15:09:14.769 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:68 - 🔗 数据源信息: jdbc:mysql://192.168.8.3:3306/yaxt-micro?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai 2025-09-03 15:09:14.769 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:75 - 🔀 事务管理器: JpaTransactionManager 2025-09-03 15:09:14.769 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:79 - 🔄 数据库Schema更新策略: true (自动更新) 2025-09-03 15:09:14.769 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:81 - 💾 数据库类型: mysql 2025-09-03 15:09:14.769 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:86 - 🚫 已禁用IDM引擎和事件注册表 2025-09-03 15:09:15.013 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:100 - ✅ Flowable引擎初始化成功! 2025-09-03 15:09:15.013 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:101 - 🔧 Flowable版本: 6.7.2.0 2025-09-03 15:09:15.014 [main] INFO com.nbcio.modules.flowable.flow.FlowableConfig:102 - ⏱️ 启动耗时: 15657 ms 2025-09-03 15:09:15.741 [main] INFO o.f.c.engine.impl.async.DefaultAsyncTaskExecutor:154 - Creating thread pool queue of size 2048 2025-09-03 15:09:15.742 [main] INFO o.f.c.engine.impl.async.DefaultAsyncTaskExecutor:159 - Creating thread factory with naming pattern flowable-async-job-executor-thread-%d 2025-09-03 15:09:15.744 [main] INFO o.f.c.engine.impl.async.DefaultAsyncTaskExecutor:164 - Creating executor service with corePoolSize 8, maxPoolSize 8 and keepAliveTime 5000 2025-09-03 15:09:15.982 [main] ERROR o.f.common.engine.impl.interceptor.CommandContext:125 - Error while closing command context java.lang.NullPointerException: null at org.flowable.engine.impl.db.ProcessDbSchemaManager.schemaUpdate(ProcessDbSchemaManager.java:232) at org.flowable.engine.impl.SchemaOperationsProcessEngineBuild.execute(SchemaOperationsProcessEngineBuild.java:54) at org.flowable.engine.impl.SchemaOperationsProcessEngineBuild.execute(SchemaOperationsProcessEngineBuild.java:28) at org.flowable.engine.impl.interceptor.CommandInvoker$1.run(CommandInvoker.java:67) at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:140) at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:114) at org.flowable.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:72) at org.flowable.engine.impl.interceptor.BpmnOverrideContextInterceptor.execute(BpmnOverrideContextInterceptor.java:26) at org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:53) at org.flowable.common.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:105) at org.flowable.common.spring.SpringTransactionInterceptor.lambda$execute$0(SpringTransactionInterceptor.java:57) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) at org.flowable.common.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:57) at org.flowable.common.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30) at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:56) at org.flowable.engine.impl.ProcessEngineImpl.<init>(ProcessEngineImpl.java:83) at org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:917) at org.flowable.spring.SpringProcessEngineConfiguration.buildProcessEngine(SpringProcessEngineConfiguration.java:76) at org.flowable.spring.ProcessEngineFactoryBean.getObject(ProcessEngineFactoryBean.java:59) at org.flowable.spring.ProcessEngineFactoryBean.getObject(ProcessEngineFactoryBean.java:32) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:169) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101) at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1828) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1265) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:884) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:538) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:884) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:227) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:884) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:227) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207) at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:247) at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:204) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:134) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:410) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:898) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554) at org.springframework.cloud.context.named.NamedContextFactory.createContext(NamedContextFactory.java:136) at org.springframework.cloud.context.named.NamedContextFactory.getContext(NamedContextFactory.java:101) at org.springframework.cloud.context.named.NamedContextFactory.getInstance(NamedContextFactory.java:145) at org.springframework.cloud.openfeign.FeignClientFactoryBean.get(FeignClientFactoryBean.java:264) at org.springframework.cloud.openfeign.FeignClientFactoryBean.feign(FeignClientFactoryBean.java:97) at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:320) at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:310) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:169) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101) at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1828) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1265) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1532) at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1489) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1270) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405) at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) at org.jeecg.JeecgSystemCloudApplication.main(JeecgSystemCloudApplication.java:66) 2025-09-03 15:09:15.995 [main] WARN o.s.c.a.AnnotationConfigApplicationContext:559 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'flowableGlobalListenerConfig' defined in file [D:\work\javacode\yaxt-micro\jeecg-cloud-module\nbcio-boot-module-flowable\target\classes\com\nbcio\modules\flowable\config\FlowableGlobalListenerConfig.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'taskCreateListener' defined in file [D:\work\javacode\yaxt-micro\jeecg-cloud-module\nbcio-boot-module-flowable\target\classes\com\nbcio\modules\flowable\listener\TaskCreateListener.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'taskServiceBean' defined in class path resource [org/flowable/spring/boot/ProcessEngineServicesAutoConfiguration.class]: Unsatisfied dependency expressed through method 'taskServiceBean' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException 2025-09-03 15:09:15.997 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext:559 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jeecgTestFeignController': Unsatisfied dependency expressed through field 'jeecgTestClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.jeecg.modules.cloud.feign.feign.JeecgTestClient': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'flowableGlobalListenerConfig' defined in file [D:\work\javacode\yaxt-micro\jeecg-cloud-module\nbcio-boot-module-flowable\target\classes\com\nbcio\modules\flowable\config\FlowableGlobalListenerConfig.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'taskCreateListener' defined in file [D:\work\javacode\yaxt-micro\jeecg-cloud-module\nbcio-boot-module-flowable\target\classes\com\nbcio\modules\flowable\listener\TaskCreateListener.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'taskServiceBean' defined in class path resource [org/flowable/spring/boot/ProcessEngineServicesAutoConfiguration.class]: Unsatisfied dependency expressed through method 'taskServiceBean' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException 2025-09-03 15:09:15.998 [main] INFO o.s.a.r.listener.SimpleMessageListenerContainer:1260 - Shutdown ignored - container is not active already 2025-09-03 15:09:16.004 [main] INFO o.s.orm.jpa.LocalContainerEntityManagerFactoryBean:598 - Closing JPA EntityManagerFactory for persistence unit 'default' 2025-09-03 15:09:16.009 [main] INFO c.b.dynamic.datasource.DynamicRoutingDataSource:217 - dynamic-datasource start closing .... 2025-09-03 15:09:16.011 [main] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ... 2025-09-03 15:09:16.013 [main] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed 为什么还是报错
最新发布
09-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值