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

javax.persistence.OneToMany.orphan删除Z

梁丘亦
2023-03-14

我试图在一个运行在Weblogic 11g上的应用程序中实现Hibernate,在使用OneToMany、OneToOne和其他join标记进行部署时,收到以下错误:

java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:591)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at gov.nysed.sedmon.common.context.ContextInitializer.initialize(ContextInitializer.java:21)
        at org.springframework.web.context.ContextLoader.customizeContext(ContextLoader.java:491)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:382)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
        at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:481)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:181)
        at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1872)
        at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3153)
        at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1508)
        at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482)
        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
        at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
        at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
        at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
        at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
        at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
        at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
        at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
        at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:58)
        at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
        at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
        at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:569)
        at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
        at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
        at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:323)
        at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
        at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
        at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
        at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
        at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
        at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
        at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
        at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
    Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
        at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1893)
        at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:767)
        at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:686)
        at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3512)
        at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3466)
        at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1355)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1756)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1840)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:242)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:372)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:357)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)

我对这个错误的研究表明,Weblogic正在从类路径使用JPA1.0。然而,我们在weblogic中使用的是Preferve web inf类。xml,所以我想知道为什么Weblogic不喜欢hibernate-jpa-2.0-api。1.0.1.最终的jar

所有其他答案/建议都是从CLASSPATH中删除持久性-jpa-1.0库,并将其替换为jpa-2.0库。

我觉得这是一种可怕的做法,因为应用程序上的每个开发人员——无论是现在还是将来——都需要修改他们的类路径才能运行应用程序。更不用说部署到临时服务器和生产服务器时会出现任何类似的问题。

有人能解释一下这种情况吗?

谢啦!

共有2个答案

阎德宇
2023-03-14

我面临着同样的问题,我不得不破解weblogic。

我就是这么做的:

>

  • 编辑启动weblogic服务器的文件(startwebologic.cmd),该文件位于如下路径中:C:\Users{username}\AppData\Roaming\JDeveloper\system11。1.2.0.38.60.17\DefaultDomain\bin并在文件的第6行中添加此行。SETLOCAL

    @REM哈克JPA开始回显哈克JPA开始集wls_modules=C:\oracle\Middleware\模块集PRE_CLASSPATH=%wls_modules%\javax.persistence_1.0.0.0_2-0-0.jar;%wls_modules%\com.oracle.jpa2support_1.0.0.0_2-0.jar;回显PRE_CLASSPATH=%PRE_CLASSPATH%回显哈克JPA结束@REM哈克JPA结束

    • 这样就可以覆盖weblogic在JPA中使用的LIB

    之后,在weblogic控制台中修改JPA提供程序:

    • 在浏览器中转到weblogic控制台,通常它运行在localhost:7101/console
    • 转到"JTA"
    • 选择“JPA”选项卡
    • 在默认JPA提供程序中选择Kodo
    • 重启weblogic服务器

    通过这种方式,weblogic使用新定义的libs,该libs具有正确的类版本

  • 岳君之
    2023-03-14

    有两种可能的方法

    • 过滤类加载器,通知Weblogic的类加载器机制某些库(实际上是包)优先于与Weblogic捆绑的库

    对于这种方法,您创建一个应该在weblogic-application.xml上创建一个条目,指定优先于Weblogic的应用程序库中的包,例如,如果您想替换Antlr,您可以使用以下内容:

    <prefer-application-packages>
        <package-name>antlr.*</package-name>
    </prefer-application-packages>
    
    • 共享库部署

    来自Weblogic的文档(我的重点)

    WebLogic Server中的共享JavaEE库功能提供了一种在多个企业应用程序之间共享一种或多种不同类型JavaEE模块的简单方法。共享JavaEE库是部署时向JavaEE应用程序容器注册的单个模块或模块集合。共享JavaEE库可以是以下任何一种:

    • 独立EJB模块
    • 独立Web应用程序模块
    • 多个EJB模块打包在一个企业应用程序中
    • 多个Web应用程序模块打包在一个企业应用程序中
    • 单个普通JAR文件

    共享库部署也适用于您的案例(替换Weblogic附带的库)的原因是,在使用共享库时考虑了优先顺序,但只使用过滤类加载程序要简单得多。

     类似资料:
    • 删除数据 force 设置为true 时,不进行物理删除,只是软删除 model.destroy( { where:{ id:this.ctx.params.id }}, { force: true } ) 恢复所有软删除数据 model.restore() 恢复指定ID数据 model.restore( { where: { id: 2 } } )

    • rm(remove),可以删除目录或文件。 rm 要删除的内容的路径 练习:删除文件 rm ninghao-project/README.md 练习:删除整个目录 上面的命令会删除掉 ninghao-project 目录下的 README.md 这个文件。要删除一个目录里包含的所有内容,要加上 r 选项,想不出现确认提示,还要再加一个 f 选项。 rm -rf ninghao-project

    • 删除容器 可以使用 docker container rm 来删除一个处于终止状态的容器。例如 $ docker container rm trusting_newtontrusting_newton 如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。 清理所有处于终止状态的容器 用 docker container ls -a 命令可以查看所有

    • 模型的删除和数据库的删除方法区别在于,模型的删除会包含模型的事件处理。 删除当前模型 删除模型数据,可以在查询后调用delete方法。 $user = User::get(1); $user->delete(); delete方法返回影响的记录数,V5.1.6+版本开始返回布尔值 根据主键删除 或者直接调用静态方法(根据主键删除) User::destroy(1); // 支持批量删除多个数据 U

    • 请求地址 https://api.es.xiaojukeji.com/river/Member/del 返回数据格式 JSON 请求方式 POST 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分配的AppKey access_token string yes 授权后的access to

    • 请求地址 https://api.es.xiaojukeji.com/river/BudgetCenter/del 返回数据格式 JSON 请求方式 POST 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分配的AppKey access_token string yes 授权后的acc