問題タブ [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()
、entitymanager を開き、それを再度開くことです。私はいくつかの接続されていないアプリケーションでこの動作を見てきました。Spring を使用するもの、Spring を使用しないもの、jpa-frontend を使用するもの、休止状態をネイティブに使用するものがあります。
奇妙なことに、この問題のない休止状態のアプリケーションに遭遇したことはありませんが、インターネットを検索すると空白になります。私 (および他の何十人もの開発者) が間違っていることは何ですか?
spring - Hibernate JPA と Spring Framework でロード時間/ランタイム ウィービングを有効にする方法
Spring Framework アプリケーションでHibernate を JPA プロバイダー (EntityManagerFactory
代わりに itsを使用しています) として使用しています。SessionFactory
Spring Framework の読み込み時間の織り込みサポートが機能するようになったので、そのハードルを超えました。
エンティティのプロパティbyte[]
とプロパティの遅延読み込みを有効にする必要があります。Hibernate の ant タスクを使用してビルド@ManyToOne
時にエンティティをインストルメント化 (ウィービング) する方法は理解していますが、代わりに実行時にエンティティをインストルメント化(ロード時ウィービング)したいと考えています。いくつかの Google 検索結果で への参照を見てきましたが、それを有効にするための実際の手順はありません。実行時にエンティティを計測できるように Hibernate に指示するには、どのプロパティを設定する必要がありますか?
java - Hibernate Unmanaged JPA を使用して Equinox OSGI フレームワークで EntityManagerFactory を取得する
Unmanaged JPAを使用して 1 つのエンティティを永続化しようとするEquinox EclipseとHibernate/JPAを使用して2 つの OSGI バンドルを開発しています。
最初のバンドル: "Testhibernate" は、hibernates jar からすべてのパッケージをエクスポートするバンドルであり、OSGI サービスを登録し、Equinox タグEclipse-BuddyPolicy: registeredも使用するアクティベーター " org.hibernate.osgi.HibernateBundleActivator " を持っています。
2 番目のバンドル: "TesthibernateConfigDAO" には最初のバンドルに対する依存関係があり、Manifest.mf ファイルにもEclipse-RegisterBuddy: Testhibernateというタグがあり、persistence.xml ファイルをリンクしています。
OSGI Equinox コンテナーで両方を実行するときのこの 2 番目のバンドルでは、メソッドを使用する場合:
次に、EntityManagerFactory を取得し、エンティティをデータベースに永続化して、すべてOK です。
しかし、私は公式の休止状態のWebサイトで次を読みました:
17.4.3. EntityMangerFactory の取得
hibernate-osgi は、OSGi 環境に固有の EntityManagerFactory をブートストラップおよび作成する JPA PersistenceProvider インターフェース名を使用して、OSGi サービスを登録します。EMF を手動で作成するのではなく、サービスを通じて取得することが重要です。このサービスは、OSGi ClassLoader、検出された拡張ポイント、スキャンなどを処理します。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) at 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. org.eclipse.osgi.framework.internal で.core.BundleContextImpl$1.run(BundleContextImpl.java:711) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) . .. 12 以上 原因:org.hibernate.ejb.Ejb3Configuration.addScannedEntries( Ejb3Configuration.java:506 ) で org.hibernate.ejb.Ejb3Configuration.addMetadataFromScan( Ejb3Configuration.java:477) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:363) ... 19 詳細
そして、公式ドキュメントを読むのに 3 日以上費やしていますが、何が問題なのかわかりません。
hibernate - 3.4.0 CE の Hibernate での mule-module-jpa 1.2.0 の使用。EntityManager を定義するには?
Mule 3.4 CE に適した mule-module-jpa の実例を教えてもらえますか?
私は高低を調べて、テストを実行するために 1 日の大半を費やし、適切に定義された 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- の「ドキュメント」へのリンクをたどりました。 jpa。ここでも、entityManager 構成に関する詳細はありません。また、そこにある Maven 情報は、Studio が mule 更新サイト経由でインストールする mule-module-jpa の 1.2.0 バージョン用に Studio が maven-mule-plugin に入れる内容とは異なり、古くなっているようです。
次に、 https: //github.com/mulesoft/mule-module-jpa/tree/master/src/test/resources にある mule-module-jpa のソースのテストを見て、解決策を見つけられるかどうかを確認しました。 .
それを使用して、モジュールを使用して小さなミュールアプリをコンパイルするために Studio および/または Maven を取得しましたが、Caused by: java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence の根本的な原因が Caused by: java .lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence
私のmaven depsには関連するHibernateのものが含まれており、スタジオで実行しているときに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: Error creating bean with name 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' defined in URL [file:/home/matthew/MuleStudio/workspace/.mule] /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: Error creating bean with name 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' defined in URL [file:/home/matthew/MuleStudio/workspace/.mule] /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: Error creating bean with name 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' defined in URL [file:/home/matthew/MuleStudio/workspace/.mule] /apps/jpa_test2/jpa_test2.xml]: Bean のインスタンス化に失敗しました。ネストされた例外は org.springframework.beans.BeanInstantiationException: Bean クラスをインスタンス化できませんでした [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: コンストラクターが例外をスローしました。ネストされた例外は、org.mule.config.spring.SpringXmlConfigurationBuilder の java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence の org.mule.registry.AbstractRegistry.initialise(AbstractRegistry.java:117) です。createSpringRegistry(SpringXmlConfigurationBuilder.java:119) で org.mule.config.spring.SpringXmlConfigurationBuilder.doConfigure(SpringXmlConfigurationBuilder.java:73) で org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:46) ... 11詳細 原因: org.springframework.beans.factory.BeanCreationException: URL [ファイル:/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]: コンストラクターが例外をスローしました。ネストされた例外は java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:282) at org.springframework.beans.factory.support.BeanDefinitionValueResolver. 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]: コンストラクターが例外をスローしました。ネストされた例外は java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1011) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory です。 createBeanInstance(AbstractAutowireCapableBeanFactory.java:957) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory. org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) で doCreateBean(AbstractAutowireCapableBeanFactory.java:490) org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:271) で... 28 以上 原因: org.springframework.beans.BeanInstantiationException: Bean クラスをインスタンス化できませんでした [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: コンストラクターが例外をスローしました。ネストされた例外は java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy. java:87) org.
このモジュールは、スタジオ内からクラウド コネクタとして利用できるにもかかわらず、使用する準備ができていないと思い始めていますか?
java - MySQL EntityManager 範囲クエリ
このクエリを単純化して、一度だけ実行するにはどうすればよいですか。私の現在のコード:
一度に4つのqartalすべてのリストを照会できますか? このようなもの:
編集:結果は4つのオブジェクトのリストになるはずです:
java - @Autowire の場合は EntityManagerFactory nullPointerException
私のDAOImpl Autowiringの1つで正常に動作する場合、エラーが発生した場所を教えてください。ただし、PcDAOImplではnullPointer例外がありますか?
GitHubにあるすべてのプロジェクト
そして、ここに 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
merged() です)
しかし、ビューレイヤーを更新すると、古いマップの結果が表示されることがあります。キャッシュレイヤーを追加していないと確信しています。
ここに私が見るものがあります:
たとえば、 を格納するカテゴリが 1 つあります。
mysqlでは正しく表示されます:
ビューレイヤーでは、意図的に各名前に「X」を追加しました。
コミット後、古いマップが正しく置き換えられ、mysql で値が実際に変更されます。
しかし、そのようなページをリロードすると、古い地図が表示されることがあります (常にではなく、約 50/50 ):
Category
ログは、ビュー層ではなく、ドメイン オブジェクト () に書き込まれます。更新するたびに、 POJO でログがトリガーされます。したがって、ビューレイヤーは何もキャッシュしていないと確信しています。
メモリから消去されていない古いものがあるようでlangMap
、休止状態は時々そのバージョンを取得します。もう一度修正すると、ランダムにローテーションする 3 つのバージョンのマップが表示されます。これは奇妙です。
サーバーを再起動するだけで、常に正しいlangMap
.
ここで何が間違っている可能性がありますか?
環境 :
- - - - - - 更新しました - - - - - -
好奇心から、CategoryDao.get(1)
本当に db にヒットするかどうかを調べたいと思います。をオンにしhibernate.show_sql=true
、いくつかのログインを追加してからCategoryDao.get(1)
、プロセスを再実行しました。
そして結果:
すべてget()
がロガーをトリガーしますが、予想どおり、古いデータには SQL ログが表示されません。彼らはデータベースにアクセスしていないようです。最新のデータに SQL ログが表示されないことがあります。とにかく、SQLコードが表示されれば、結果は間違いなく最新です。
これはキャッシュの問題のようです。ただし、ここではキャッシュ (ehcahce を含む) を使用していません。hibernate.cache.use_query_cache
とhibernate.cache.use_second_level_cache
を false に設定しましたが、無駄でした。
ここで何が間違っている可能性がありますか?
------------ 更新 2 ------------
@Transactional
コメントで、 DAOのget(id)
方法を紹介することで問題を解決できると思いました。ただし、(Web の) アクション全体がカテゴリのみを取得する場合にのみ機能します。たとえば、次は問題ありません。
カテゴリをどのように変更しても、正常に機能langMap
しlangMap
、 db に正しく保存され、 db から取得されます。SQL が表示されます。すべてget(id)
が実際にデータベースにヒットします。
しかし実際には、このアクションは通常、1 つのカテゴリ オブジェクトをレンダリングするだけではありません。たとえばsubCategories
、カテゴリの下のアイテムまたはアイテムをフェッチする他のクエリがあります。
そんなアクションも良さそうですが、オフラインテストもOK。しかし、オンラインの場合、カテゴリの を更新した後langMap
、不思議なことにキャッシュされlangMap
た が再び浮き上がることがあります (WTF!)。また、categoryDao.get(id)
常に DB にヒットするとは限りません。
さて、ここで何が間違っているのでしょうか?