问题标签 [hibernate-entitymanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Hibernate会话中的内存泄漏?
我在 Hibernate 会话中遇到内存泄漏。
一个长时间运行的线程不断地加载和更新数据。虽然线程定期调用entityManager.clear()
我观察到:
1.)Session
规模增长(自应用开始以来的线性增长)
2.) 执行时间的增长(自应用程序开始以来呈指数增长)
唯一似乎有帮助的是close()
实体管理器并重新打开它。我在几个未连接的应用程序中看到了这种行为,一些使用 spring,一些没有,一些使用 jpa-frontend,一些本地使用 hibernate。
很奇怪:虽然我从来没有遇到过没有这个问题的休眠应用程序,但在互联网上搜索却是一片空白。我(和其他数十名开发人员)做错了什么?
spring - 如何使用 Hibernate JPA 和 Spring Framework 启用加载时间/运行时编织
我在 Spring Framework 应用程序中使用 Hibernate 作为 JPA 提供程序(我使用它EntityManagerFactory
而不是它)。SessionFactory
我设法让 Spring Framework 的加载时间编织支持工作,所以我克服了这个障碍。
我需要在实体上启用延迟加载byte[]
和属性。@ManyToOne
我了解如何使用 Hibernate 的 ant 任务在构建时检测(编织)我的实体,但我想在运行时检测我的实体(加载时编织)。我在几个 Google 搜索结果中看到了对 in 的引用,但没有启用它的实际说明。我需要设置什么属性来指示 Hibernate 它可以在运行时检测我的实体?
hibernate - Java Persistence API - 覆盖/扩展 Hibernate(或类似)EntityManager
我目前正在使用 Hibernate 的 JPA 实现成功地将对象持久保存到数据源。现在,我想重写hibernate 的EntityManager 实现,特别是createQuery 函数。因此,在构建持久性上下文时,将使用我自定义的 EntityManager。
这可能吗?如果是这样,我将如何进行?
非常感谢。
编辑:
我想实现我自己的缓存。(注意:我已经查看了 Hibernate 的二级缓存,主要缺点是“缓存永远不会知道另一个应用程序对持久存储所做的更改”,所以我反对它)。
我的缓存将包含数据源中最近使用的数据。由于客户端通过 EntityManager 请求数据,我将覆盖/扩展它,以便首先检查缓存。如果未命中,那么 EntityManager 将照常进行。
编辑2:
或者,我可以从 org.hibernate.ejb 扩展 QueryImpl。这将允许我将 getResultList() 和 getSingleResult() 的功能更改为以下内容:
- 检查外部缓存中的数据
- 如果找到,返回结果
- 否则,调用基类 QueryImpl.getResultList(或 QueryImpl.getSingleResult())
java - 使用 Hibernate Unmanaged JPA 在 Equinox OSGI 框架中获取 EntityManagerFactory
我正在使用Equinox Eclipse和Hibernate/JPA开发两个 OSGI 捆绑包,试图使用Unmanaged JPA持久化一个实体。
第一个包:“Testhibernate”是一个包,它从休眠 jar 中导出所有包,并具有一个激活器“ org.hibernate.osgi.HibernateBundleActivator ”,它注册了一个 OSGI 服务并使用 Equinox 标记Eclipse-BuddyPolicy:registered。
第二个包:“TesthibernateConfigDAO”只是对第一个包有依赖关系,并且在 Manifest.mf 文件中具有标记Eclipse-RegisterBuddy: Testhibernate以链接 persistence.xml 文件。
在我在 OSGI Equinox 容器中运行这两个错误时,如果我使用以下方法:
然后我得到 EntityManagerFactory 并且我可以将我的实体直接保存在数据库中,一切都很好。
但我在官方hibernate网站上阅读了下:
17.4.3. 获取 EntityMangerFactory
hibernate-osgi 使用 JPA PersistenceProvider 接口名称注册一个 OSGi 服务,该服务引导并创建一个特定于 OSGi 环境的 EntityManagerFactory。至关重要的是,您的 EMF 通过服务获得,而不是手动创建。该服务处理 OSGi 类加载器、发现的扩展点、扫描等。手动创建 EntityManagerFactory 保证在运行时不起作用!
有关如何发现和使用服务的示例,请参阅 unmanaged-jpa QuickStart 的 HibernateUtil.java。
所以我尝试用这个来获取 EntityManagerFactory:
我已经调试过了,我只是得到了服务和 persistenceProvider 对象,但是当我执行最后一次尝试获取 EntityManagerFactory 时,我得到了错误:
org.osgi.framework.BundleException:捆绑TesthibernateConfigDAO的testhibernateconfigdao.HibernateJpaActivator.start()中的异常。在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) 在 org.eclipse .osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) 在 org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390) 在 org.eclipse.osgi.framework .internal.core.Framework.resumeBundle(Framework.java:1176) 在 org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559) 在 org.eclipse.osgi.framework.internal.core .StartLevelManager.resumeBundles(StartLevelManager.java: 原因:javax.persistence.PersistenceException: Unable to configure EntityManagerFactory at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:387) at org.hibernate.osgi.OsgiPersistenceProvider.createEntityManagerFactory(OsgiPersistenceProvider.java:83) at de。 test.HibernateUtil.getEntityManagerFactory(HibernateUtil.java:29) 在 de.test.HibernateUtil.getEntityManager(HibernateUtil.java:18) 在 testhibernateconfigdao.HibernateJpaActivator.start(HibernateJpaActivator.java:24) 在 org.eclipse.osgi.framework.internal org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) 的 java.security.AccessController.doPrivileged(Native Method) 的 .core.BundleContextImpl$1.run(BundleContextImpl.java:711) 。 .. 12 更多原因:java.lang.NullPointerException 在 org.hibernate.ejb.Ejb3Configuration.addScannedEntries(Ejb3Configuration.java:506 ) 在 org.hibernate.ejb.Ejb3Configuration.addMetadataFromScan( Ejb3Configuration.java:477) 在 org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:363) ... 19 更多
而且我花了超过 3 天的时间阅读官方文档,但我不明白这是什么问题。
java - Hibernate 4 EntityManager CriteriaBuilder sortby 嵌套属性
我的模型:
我的元模型:
我使用 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean 将 EntityManager 注入我的 DAO
我可以对我的结果进行排序
(按nested.id 排序)
但我想按
我使用 Hibernate 4.2.6.FINAL 作为我的 JPA 实现
hibernate - 在 3.4.0 CE 中将 mule-module-jpa 1.2.0 与 Hibernate 一起使用。如何定义实体管理器?
谁能指出一个适用于 Mule 3.4 CE 的 mule-module-jpa 的工作示例?
我一直在寻找高低,并花了一天的大部分时间来尝试运行测试,并且一直试图在 mule 应用程序中设置正确定义的 entityManagerFactory。
当我在这里看到描述模块功能的文章时,我很兴奋。http://blogs.mulesoft.org/getting-started-with-jpa-and-mule/不幸的是,该文章缺少有关模块配置的任何详细信息。
接下来我找到了该模块的 github 存储库(https://github.com/mulesoft/mule-module-jpa),并点击了https://github.com/mulesoft/mule-module-的“文档”链接杰帕_ 再次没有关于 entityManager 配置的详细信息。还注意到那里的 maven 信息似乎与 Studio 将通过 mule 更新站点安装的 1.2.0 版本的 mule-module-jpa 的 maven-mule-plugin 中的内容已过时。
接下来,我在https://github.com/mulesoft/mule-module-jpa/tree/master/src/test/resources查看了 mule-module-jpa 源代码中的测试,看看我是否可以拼凑出一个解决方案.
使用它,我已经让 Studio 和/或 maven 使用该模块编译了一个小型 mule 应用程序,但它不会开始给出 Caused by: java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence ,其根本原因是 Caused by: java .lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence
我的 Maven 部门确实包含了相关的 Hibernate 内容,并且在 Studio 下运行时,我确实看到 jar 包含在输出目录中。但是骡子类加载器似乎无法找到它们......或者我对需要什么一无所知。
我已经尝试了几种 Hibernate 和 Spring-orm 版本的组合,目前正在使用每个版本中的最新版本:
我的 pom 的相关部分如下所示:
我的简单骡子配置看起来像:
我得到的完整例外是:
在设置bean属性'jpaVendorAdapter'时,无法创建[org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]类型的内部bean'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule 中定义的名称为 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' 的 bean 创建错误/apps/jpa_test2/jpa_test2.xml]:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence (org.mule.api.lifecycle. springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] 同时设置 bean 属性'jpaVendorAdapter';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule 中定义的名称为 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' 的 bean 创建错误/apps/jpa_test2/jpa_test2.xml]:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.mule.config.builders.AbstractConfigurationBuilder 中的 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence (org.mule.api.lifecycle.InitialisationException)。jpa.vendor.HibernateJpaVendorAdapter] 同时设置 bean 属性'jpaVendorAdapter';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule 中定义的名称为 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' 的 bean 创建错误/apps/jpa_test2/jpa_test2.xml]:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.mule.config.spring.SpringXmlConfigurationBuilder 中 org.mule.registry.AbstractRegistry.initialise(AbstractRegistry.java:117) 中的 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence。createSpringRegistry(SpringXmlConfigurationBuilder.java:119) at org.mule.config.spring.SpringXmlConfigurationBuilder.doConfigure(SpringXmlConfigurationBuilder.java:73) at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:46) ... 11更多原因:org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule/apps/jpa_test2/jpa_test2.xml] 中定义名称为“entityManagerFactory”的 bean 创建错误:不能在设置bean属性'jpaVendorAdapter'时创建[org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]类型的内部bean'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule/apps/jpa_test2/jpa_test2.xml] 中定义的名称为 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' 创建 bean 时出错:bean 的实例化失败的; 嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.springframework.beans.factory.support.BeanDefinitionValueResolver 的 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:282) 的 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence。 org.springframework.beans.factory.support 上的 resolveValueIfNecessary(BeanDefinitionValueResolver.java:121)。在 URL [file:/home/matthew/MuleStudio/workspace/.mule/apps/jpa_test2/jpa_test2.xml] 中定义的 HibernateJpaVendorAdapter#495b317b':bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory 的 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1011) 的 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence。 createBeanInstance(AbstractAutowireCapableBeanFactory.java:957) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory。doCreateBean(AbstractAutowireCapableBeanFactory.java:490) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:271) ... 28 更多原因:org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy. java:87) 在组织。
我开始认为这个模块还没有准备好使用,尽管它可以作为工作室内部的云连接器使用?
java - MySQL EntityManager 范围查询
我怎样才能简化这个查询,只运行一次。我当前的代码:
我可以以某种方式一次查询所有 4 个 qartal 的列表吗?像这样的东西:
编辑:结果应该是 4 个 Object 的列表:
java - EntityManagerFactory nullPointerException if @Autowire
如果我的 DAOImpl 自动装配工作正常,请告诉我哪里有错误,但在 PcDAOImpl 中我有 nullPointer 异常?
这是来自tomcat的堆栈跟踪:
我哪里有问题?
spring - 升级 Hibernate 后奇怪的自引用约束冲突
我hibernate-entitymanager
在 Spring 应用程序中使用。我正在升级我的 Hibernate 版本。将其缩小到确切版本:当我从 4.2.1.Final 升级到 4.2.2.Final (或更高版本)时,当我的单元测试启动并尝试创建数据库时,我收到以下错误架构:
该错误不会阻止系统正常工作,但显然我无法在我的系统中出现如此严重的错误并且没有任何解释的情况下进行生产。
这看起来很像Incident
表与自身有外键关系,但绝对不是这样。
我将尝试在此处复制实体的本质:Incident
请让我知道我是否可以提供其他任何东西来帮助你们阐明这一点。我已经玩了几个小时,没有结果,非常感谢您的帮助。
hibernate - JPA @ElementCollection 神秘地缓存
我的 POJO(名为 Category)有一个langMap
(Language Map) ,它存储Locale -> String
映射。它定义为:
在我更新地图之前它运行良好:代码很简单:
清除所有langMap
并输入新值。(当然,它是@Transactional
merge() )
但是,当我刷新视图层时,有时会看到旧地图的结果。我确定我没有添加任何缓存层。
这是我看到的:
例如,有一个类别存储
在 mysql 中正确显示:
在视图层中,我特意为每个名称添加了“X”:
提交后,它正确地替换了旧地图,并且在 mysql 中,值被真正修改:
但是当我重新加载此类页面时,我偶尔会看到显示的旧地图(并非总是如此,大约 50/50):
日志写入域对象 ( Category
),而不是视图层。每次刷新都会触发 POJO 中的日志。所以我确信视图层没有缓存任何东西。
似乎有一个过时langMap
的没有从内存中清除,hibernate偶尔会得到那个版本。如果我再修改一下,就会有3个版本的地图随机旋转……很奇怪。
只有重新启动服务器才能始终得到正确的langMap
.
这里有什么问题?
环境 :
- - - - - - 更新 - - - - - -
出于好奇,我想知道是否CategoryDao.get(1)
真的命中了 db。我打开hibernate.show_sql=true
,添加一些登录CategoryDao.get(1)
,然后重新运行进程。
结果:
每次get()
触发记录器,但是,正如预期的那样,旧数据没有显示 SQL 日志。看来他们没有打分贝。有时最新数据未显示 SQL 日志。无论如何,如果它显示 SQL 代码,结果肯定是最新的。
这似乎是一个缓存问题。但我在这里没有使用任何缓存(包括 ehcahce)。我什至将hibernate.cache.use_query_cache
, and设置hibernate.cache.use_second_level_cache
为 false ,但徒劳无功。
这里有什么问题?
------------ 更新2 ------------
在评论中,我认为我通过介绍@Transactional
DAO 的get(id)
方法来解决问题。但它仅在整个(网络)操作仅检索 category 时才有效。例如,以下是可以的:
它运行良好,无论我如何修改类别langMap
,langMap
都正确存储到 db 并从 db 检索。我看到了 SQL,每一个都get(id)
真正击中了数据库。
但实际上,这个动作一般不会只渲染一个类别对象。例如,我有其他查询subCategories
,或类别下的项目:
这样的动作看起来还可以,离线测试也可以。但是上网的时候,更新分类后langMap
,神秘的缓存langMap
有时又会浮起来(WTF!)。而且categoryDao.get(id)
也不总是击中 DB 。
那么,这里可能有什么问题?