問題タブ [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 の session.createSQLQuery() を使用して JOIN を使用する方法
従業員とプロジェクトの 2 つのエンティティ (テーブル) があります。従業員は複数のプロジェクトを持つことができます。Project テーブルの CREATOR_ID フィールドは、Employee テーブルの ID フィールドを参照します。Employee エンティティは Project の参照を保持していませんが、Project エンティティには Employee の参照があります。
EntityManager 次のクエリを使用すると正常に動作します -
しかし、LAZY アソシエーション関係があるため、エラーが発生します。
プロキシを初期化できませんでした - セッションがありません
Employee エンティティからプロジェクト情報にアクセスしようとすると。これは予想されることなので、以下に示すように、Hibernate のセッションを使用してクエリを作成しています。
しかし、次のようなエラーが表示されます。
そのような場合に正しい JOIN 構文を提案できる人はいますか? 私が使用する("SELECT * FROM EMPLOYEE_TAB E, ........")
と、他のエラーが発生します:
java.lang.ClassCastException: [Ljava.lang.Object; com.im.server.dto.EmployeeDTO にキャストできません
.
前もって感謝します。
hibernate - データベース全体を消去する Persistence.createEntityManagerFactory
現在、Hibernate + JPA を使用するプロジェクトに取り組んでいます。プロジェクトで何を変更したか正確には覚えていませんが、新しい EntityManagerFactory をインスタンス化しようとするたびに、データベースからすべてのデータが消去されます。
コード スニペットは次のとおりです。
「Persistence.createEntityManagerFactory("hibernatePersistence")」を含む行で、データベース全体がクリアされます。
この問題を解決するためのあらゆるアイデアを使い果たしました...皆さんが助けてくれることを願っています.
前もって感謝します!
java - HibernateSessionFactoryとJPAEntityManagerFactory
私はHibernateを初めて使用しますが、Hibernateを使用するかSessionFactory
JPAEntityManagerFactory
を使用してHibernateを作成するかがわかりませんSession
。
これら2つの違いは何ですか?それらのそれぞれを使用することの長所と短所は何ですか?
hibernate - クエリの前に Hibernate Entity Manager が自動フラッシュされ、トランザクション内の DB への変更がコミットされる
Jboss AS 6.0.0 final で JPA 2 で Hibernate 3.6.0 を使用しています。私のEJBには、エンティティ値を更新してそれに対してクエリを実行するメソッドがあります。メソッド全体が BMT トランザクションで実行されます。何かが失敗した場合、すべての変更はロールバックされ、DB にコミットされません。
データベースは mySql です。
JPA クエリを実行する前に、JPA は変更された状態を DB に自動フラッシュして、古いデータが返されないようにします。ただし、私の方法では、自動フラッシュが直接更新して変更を DB にコミットし、その後何か問題が発生したとしても、変更はロールバックされません。それで、私の設定に間違った設定があるのか、それともバグなのかを尋ねたいと思います.
EJB
persistence.xml
hibernate.cfg.xml
mysql-ds.xml
さらに調査したところ、フラッシュが発生するたびに、ダーティな変更が書き込まれ、DB に直接コミットされることがわかりました。flush() を削除すると、すべて正常に動作します。ただし、クエリの前にシステムによってトリガーされるフラッシュがあり、必要だと思います。
データベースは自動コミットされているようです。hibernate.connection.autocommit
プロパティをに設定しようとしましfalse
たが、問題が解決せず、仕様に違反しているという EJB 警告が表示されます。
更新:原因は mysql にあるはずです。mssqlサーバーに切り替えると、問題はなくなります。また、mysqlで試してみましたがxa-datasource
、まだうまくいきません...
hibernate - 管理されていない環境で休止状態
小さな問題が発生しました。私は常にGenericDAOパターンを使用してWebでHibernateとSpringを使用していましたが、現在は、EJBなどを使用しないGUIアプリにHibernateを使用しています。
私の主な問題は私がこれを持っていたということです
@PersistenceContext(unitName = "persistenceUnit")
private EntityManager em;
しかし今、私はこのようにしています:
private EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit");
private EntityManager em = emf.createEntityManager();
私が持っている大きな欠陥に気付いたのは、このGenericDAOクラスを継承するたびに、毎回1つのEntityManagerFactoryを作成しているということです。どうすればよいですか?
編集:
これがそれを解決するための最も良い方法であることに同意しますか?
mysql - hibernate commit: ログにコミットされたと表示されますが、実際にはそうではありません
このコードを見てください。Persist は Candidate というテーブルに対して機能し、VerifyLink という別のテーブルに対しては機能しませんが、hibernate はログ ファイルに永続化されていることを示しています。以下のログを見てください。最初のケースでは「候補に挿入」というクエリが表示されますが、2 番目のケースではクエリが表示されません。なにが問題ですか ?
初めて何かをコミットするとき
[#|2011-07-25T12:38:40.020+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|org.hibernate.ejb.EntityManagerImpl@15e3c52|#]
[#|2011-07-25T12:38:40.021+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|ステータス: 0|#]
[#|2011-07-25T12:38:40.093+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|Hibernate: Candidate (comment、creation_date、currentCompany、current_ctc、cv、cv_name、dob、email_id、email_id_verified、expected_ctc、first_name、last_name、location、mobile、notice_period、password、sex、upadte_date、years_of_exp、cand_id) 値 ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|#]
[#|2011-07-25T12:38:40.164+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|コミット: |#]
[#|2011-07-25T12:38:40.165+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|取引終了:|#]
[#|2011-07-25T12:38:47.158+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|org.hibernate.ejb.EntityManagerImpl@1fd91c4|#]
[#|2011-07-25T12:38:47.159+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|ステータス: 0|#]
[#|2011-07-25T12:38:47.159+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|コミット: |#]
[#|2011-07-25T12:38:47.159+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|取引終了:|#]
java - データベースから削除せずに JPA エンティティをフィルタリングする
再帰構造を許可するために、それ自体 (parent_id) への FK を持つデータベース テーブル "viewmodule" があります。
私の Java アプリケーションは JPA/Hibernate を使用して、そのテーブルのエンティティをマップします。テーブルの「タイプ」列を使用する @Discriminator アノテーションによって解決されるエンティティ階層を修正しました。
私のタスクは、このテーブルからすべての要素を (詳細に) ロードすることですが、フィールド「非表示」が true に設定されているものは除外します。明らかに単純なフィルターメカニズムです。私の最初のアプローチは、Hibernate Filter アノテーションを使用することでした。これは、最初のレイヤー (parent_id = null のすべてのビューモジュール) でうまく機能します。ただし、フィルターは「子」関係では機能しません。(私の実際のモデルでは、ViewModule のさまざまなタイプの継承構造があります)
したがって、viewModule オブジェクト ツリーを再帰的にウォークスルーし、hide=true; を持つ子関係から viewModules を削除する小さな関数を作成しました。
ただし、すべてのオブジェクトはまだ jpa/hibernate entityManager の監視下にあるため、コレクションからのすべての削除は、データベースで削除として直接実行されます。したがって、フィルター関数はデータベースからエンティティを削除しますが、これは悪いことです。
休止状態セッションから「エビクト」メソッドを使用して、フィルタリングする前にエンティティをデタッチしようとしましたが、それは LazyInitialisationException につながります。
だから、私のオブジェクトのすべての複製を防ぐために、私の質問はこの問題を解決する方法ですか? すべてのコレクションが初期化されるようにオブジェクトをデタッチする方法はありますか? または、コレクションをフィルタリングできる特別な Kung-Fu Chuck-Norris JPA アノテーションはありますか?
前もって感謝します
java - EntityManager.unwrap()はjava.lang.AbstractMethodErrorをスローします
アプリにJPA2.0を実装する際に問題が発生します。Criteriaクエリを使用しており、EntityManagerからセッションを取得する必要があります。私は次の方法でそれを行います(これによると) Session ses = entityManager.unwrap(Session.class);
Tomcat 7.0.8上で実行した後、次のようになります。
また、次のHibernate関連の依存関係を参照しています(問題があると思われる場合)。
これについて何か考えはありますか?
java - JPA-createEntityManagerFactoryはNullを返します
ここでNoobの質問。私はこの例/チュートリアルに従って、メインプロジェクトで発生し続ける問題を特定しようとしています。問題は、entityManagerFactoryがnullを返し続けることです(したがって、最初のJUnitテストを実行しようとするとNullPointerExceptが返されます)。
現在、Eclipse Indigo(JavaEE)-JRE7-Hibernate3.6.7およびJBoss7を使用しています。
そして、これが私のpersistence.xmlです(ここでも、チュートリアルから直接コピーパスタを取得しました)
私がこれまでに試した/見つけたもの:
この問題は、persistence.xmlにリストされていない永続性ユニットを使用してファクトリを作成しようとすると発生する傾向があるようです。
必要なJARがEclipseのビルドパスライブラリに含まれていることを再確認しました。これは、createEntityManagerFactory()呼び出しが短絡してnullを返す原因である可能性があることをGoogleが示唆しています(例外をスローしたりメッセージをログに記録したりするのではなく)
Hibernate接続の構成中に発生した可能性のあるエラーが原因である可能性がありますか?
私は過去数週間この壁にぶつかっていたので、ヘルプ/一般的な方向性のヒントが非常に高く評価されていることは言うまでもありません:D
hibernate - Hibernate JPAでEntityManagerを使用して@FilterJoinTableを実行する方法は?
OneToManyリレーションからのデータを制限したいと思います。私のプログラムでは、ボスアカウントは、指定された月と年に注文があるすべての会社を表示できます。会社のクラスは、これらの注文からの収入を数えることができます。@FilterJoinTableを使用しましたが、EntityManagerを使用する必要があるため、もう使用できません。これが、Sessionオブジェクトで使用したコードです。
注文クラス
会社のクラス
getメソッドは次のようになりました
getメソッドは、指定された月と年に注文がある会社のみを返します。各会社のorderListには、特定の月と年の注文のみが含まれています。getメソッドがきれいではないことは知っていますが、機能しました。この問題を解決するにはどうすればよいですか。私は無知です。
JoshuaDavis に感謝します