当前位置: 首页 > 知识库问答 >
问题:

Karaf-HiberNate-MariaDB"无法完成模式更新"错误

堵宏毅
2023-03-14

我试图设置一个项目与Karaf 4.0.4 HiberNate 4.3.6。最终,我使用MariaDB 10.0.23作为数据库。

我遵循并尝试了本教程,但:

  • 而不是使用数据源blueprint.xml我想使用pax-jdbc-config来创建一个数据源(因为数据源蓝图不建议使用)。
  • 而不是MySQL,我必须使用MariaDB。所以我假设我必须更改一些配置文件来使用MariaDB驱动程序

因此,这是我的配置:

>

  • 组织。ops4j。数据源sampleprj。cfg:

    osgi.jdbc.driver.name=mariadb
    osgi.jdbc.driver.class=org.mariadb.jdbc.Driver
    url=jdbc:mysql://DB_SERVER:3306/sampleprjdb
    dataSourceName=sampleprj
    databaseName=sampleprjdb
    user=myuser
    password=mypassword
    

    我确信我的数据库凭据和数据库名称是正确的。

    样本prj束

    <?xml version="1.0" encoding="UTF-8"?> 
    <persistence version="2.0"
        xmlns="http://java.sun.com/xml/ns/persistence"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
        <persistence-unit name="sampleprj" transaction-type="JTA">
            <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
            <jta-data-source>
                osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/sampleprj)      
            </jta-data-source>
            <properties>
                <property name="hibernate.dialect"     value="org.hibernate.dialect.MySQL5Dialect" />
                <property name="hibernate.hbm2ddl.auto" value="update" />
                <property name="hibernate.show_sql" value="true" />
                <property name="hibernate.format_sql" value="true" />
            </properties>
        </persistence-unit>
    </persistence>
    

    样本prj束

    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint default-activation="eager"
        xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0" xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0"
    
        xsi:schemaLocation="
                http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0 
                http://www.w3.org/2001/XMLSchema-instance     http://www.w3.org/2001/XMLSchema-instance 
                http://aries.apache.org/xmlns/jpa/v1.0.0 http://aries.apache.org/xmlns/jpa/v1.0.0 
                http://aries.apache.org/xmlns/transactions/v1.0.0 http://aries.apache.org/xmlns/transactions/v1.0.0 ">
    
        <bean id="dbService"
            class="org.sample.project.persistence.mariadb.impl.DbServiceImpl">
            <jpa:context unitname="sampleprj" property="em"/>
            <tx:transaction method="*" value="Required" />
        </bean>
    
        <service ref="dbService" interface="org.sample.project.IDbService" />
    
    </blueprint>
    

    样本prj束

    <project>
    
    ...
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Meta-Persistence>META-INF/persistence.xml</Meta-Persistence>
                        <Bundle-Version>1.0.0</Bundle-Version>
                        <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
                        <Manifest-Version>1</Manifest-Version>
                        <Import-Package>
                        org.apache.felix.service.command;version="[0.6,1)",
                        org.apache.felix.gogo.commands;version="[0.6,1)",
                        org.apache.karaf.shell.console;version="[2.2,4)",
                        org.hibernate.proxy,
                        javassist.util.proxy,
                        *
                        </Import-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    ...
    
    </project>
    

    我也可以确认结果清单。MF包含元持久化属性。

    在Karaf(clean)start上,我使用以下命令安装依赖包:

    feature:repo-add mvn:org.ops4j.pax.jdbc/pax-jdbc-features/0.5.0/xml/features
    feature:install transaction jndi pax-jdbc-mariadb pax-jdbc-config pax-jdbc-pool-dbcp2 jpa hibernate
    

    当我使用bundle:list时,所有的bundle似乎都已安装并处于活动状态。

    最后,我使用这个命令来安装我的示例包:

    bundle:install mvn:org.sample.prj/sample-prj/1.0
    

    但它会打印这些日志信息:

    2016-02-22 15:38:44,035 | ERROR | pool-36-thread-1 | SchemaUpdate                     | 199 - org.jboss.logging.jboss-logging - 3.1.4.GA | HHH000299: Could not complete schema update
    java.lang.NullPointerException
        at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:227)[188:org.hibernate.core:4.3.6.Final]
        at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178)[188:org.hibernate.core:4.3.6.Final]
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:522)[188:org.hibernate.core:4.3.6.Final]
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)[188:org.hibernate.core:4.3.6.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)[189:org.hibernate.entitymanager:4.3.6.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)[189:org.hibernate.entitymanager:4.3.6.Final]
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)[188:org.hibernate.core:4.3.6.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)[189:org.hibernate.entitymanager:4.3.6.Final]
        at org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:112)[190:org.hibernate.osgi:4.3.6.Final]
        at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105)[79:org.apache.aries.jpa.container:2.3.0]
        at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:85)[79:org.apache.aries.jpa.container:2.3.0]
        at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)[79:org.apache.aries.jpa.container:2.3.0]
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)[org.osgi.core-6.0.0.jar:]
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)[org.osgi.core-6.0.0.jar:]
        at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)[org.osgi.core-6.0.0.jar:]
        at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)[org.osgi.core-6.0.0.jar:]
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)[org.osgi.core-6.0.0.jar:]
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)[org.osgi.core-6.0.0.jar:]
        at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:106)[79:org.apache.aries.jpa.container:2.3.0]
        at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:90)[79:org.apache.aries.jpa.container:2.3.0]
        at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:69)[79:org.apache.aries.jpa.container:2.3.0]
        at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:40)[79:org.apache.aries.jpa.container:2.3.0]
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)[org.osgi.core-6.0.0.jar:]
        at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)[org.osgi.core-6.0.0.jar:]
        at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)[org.osgi.core-6.0.0.jar:]
        at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)[org.osgi.core-6.0.0.jar:]
        at org.osgi.util.tracker.BundleTracker.open(BundleTracker.java:156)[org.osgi.core-6.0.0.jar:]
        at org.apache.aries.jpa.container.impl.Activator.start(Activator.java:43)[79:org.apache.aries.jpa.container:2.3.0]
        at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)[org.apache.felix.framework-5.4.0.jar:]
        at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)[org.apache.felix.framework-5.4.0.jar:]
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)[org.apache.felix.framework-5.4.0.jar:]
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)[org.apache.felix.framework-5.4.0.jar:]
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)[org.apache.felix.framework-5.4.0.jar:]
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1199)[9:org.apache.karaf.features.core:4.0.4]
        at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:840)[9:org.apache.karaf.features.core:4.0.4]
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1089)[9:org.apache.karaf.features.core:4.0.4]
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl$1.call(FeaturesServiceImpl.java:985)[9:org.apache.karaf.features.core:4.0.4]
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)[:1.7.0_45]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_45]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_45]
        at java.lang.Thread.run(Thread.java:744)[:1.7.0_45]
    

    我怀疑这里缺少了一些配置。我错过了什么?

    谢谢,埃姆雷。


  • 共有1个答案

    田远
    2023-03-14

    这可能是白羊座JPA 2中的一个问题。查理·莫丹特今天刚刚给我写了一封邮件,里面有他用白羊座JPA 2做的一些测试的结果。他提到了Hibernate的类似行为,如果他也希望模式由持久性提供者创建的话。

    本教程的主要区别可能在于,本教程使用了一个不需要凭据即可登录的嵌入式应用程序。我将尝试在白羊座JPA考试中重现这个问题。你能在Apache Aries Jira中对此提出一个问题吗?

     类似资料:
    • 我想围绕现有类型/结构创建一个Wrapper。根据Newtype模式,根据Rust Book ch 19,“在Wrapper上实现Deref trait以返回内部类型将访问所有底层方法”: https://doc.rust-lang.org/book/ch19-03-advanced-traits.html 这是我在字符串包装器上的实现。一个简化示例: 但是,调用消耗self的方法会引发错误: 错

    • 问题内容: 错误代码1603。Java更新未完成。我有一个Java错误 我认为这是服务器问题,这是我第一次创建服务器且用户界面未打开。 问题答案: 从https://java.com/en/download/help/error_1603.xml 选项1:重新启动系统并卸载旧版本 在安装之前重新启动系统 一旦看到1603错误,请重新启动系统。 下载并安装脱机安装程序包。 出现提示时,在下载对话框中

    • 在MariaDB中,语句用于通过更改表中的值来修改现有字段。 语法: 或者,语句可以与,和子句一起使用。 1. 更新单个列 假设我们有一个表 - ,并具有以下数据记录: 现在,更改列的值为 的行记录,把列的值更新为:。 执行上面更新语句后,查询更新的结果 - 2. 更新多列 还可以使用MariaDB数据库中的语句来更新多个列。 在以下示例中,将更新表中为的两列 - 和的值。参考以下更新语句 - 执

    • 我试图在出现错误的情况下通过AlaMofires的回调访问 属性 我有一个枚举,它处理 类型,特别类似于Alamofire文档 在我的请求中,如果有错误,我将适用的错误存储到Alamofire提供的 案例中,如下所示: 调用该方法时: 然后,当我调用 方法时,我检查完成处理程序中的错误: 如果出现返回 的错误,我将收到以下错误 如何从返回的错误中获取 值?我试过 ,但没有成功。任何帮助都太好了!

    • 当我运行模拟器时,以下错误显示为警报: 操作无法完成。(LaunchServicesError错误0。) 我试过很多关于堆栈溢出的答案,但它们对我都不起作用。 Feb 18 14:48:12 com.apple.dt.xcode[32825]:错误域=LaunchServicesError Code=0“(null)”userInfo={Error=MissingBundleExecutable,

    • 问题内容: 我有一个让我感到困惑的奇怪问题。我有一个模型: 变体条目如下所示: 我需要添加一个新字段-说“颜色”。所以我这样做是为了批量更新: 但是,“颜色”字段未设置-如果我再次浏览并注释掉该行,则它不会显示。我似乎无法弄清楚为什么要这样做。我有一个onSave事件,该事件已正确触发,因此可以保存。我也没有对版本结构进行任何检查- 即没有代码只允许代码和价格。我显然缺少了一些东西,但几个小时后我