問題タブ [jpa-2.0]
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 でコレクションを定義しました。
列 item_id と object_id を持つマッピング テーブルを作成します。
問題は、object_id が一意に見えることです。つまり、2 つの異なるアイテムを同じオブジェクトに関連付けることはできません。しかし、それが私が欲しいものです。
item_id と object_id の組み合わせを一意にしたいと考えています。それ、どうやったら出来るの?
java - orphanRemoval を使用した Hibernate トリガーの制約違反
JPA/Hibernate (3.5.3) のセットアップで問題が発生しました。このエンティティには、子エンティティのリストである「連絡先」インスタンスを持つ「アカウント」クラスがあります。Contact のインスタンスを Account の List<Contact> プロパティに追加/削除できるようにしようとしています。
セットに新しいインスタンスを追加し、saveOrUpdate(account) を呼び出すと、すべてが適切に保持されます。その後、連絡先をリストから削除して再度 saveOrUpdate を呼び出すと、SQL Hibernate によって account_id 列が null に設定され、データベースの制約に違反しているように見えます。
私は何を間違っていますか?
以下のコードは明らかに単純化された要約ですが、別のコードで同じ結果が見られるので、問題をカバーしていると思います。これは本当に単純なことです。
SQL:
ジャワ:
結果:
編集#1:
これは実際にはバグである可能性があります http://opensource.atlassian.com/projects/hibernate/browse/HHH-5091
編集#2:
うまくいくように見える解決策がありますが、Hibernate API を使用する必要があります
Hibernate CascadeType.DELETE_ORPHAN は非推奨であるため、JPA2 バージョンに取って代わられたと想定する必要がありますが、実装には何かが欠けています。
hibernate - エンティティの ID プロパティ名に関係なく、JPQL のエンティティの主キーを「id」という名前で参照できますか?
Hibernate では、「.id」とだけ言うことができます。私が持っているとしましょう:
そして、IDで顧客の名前を取得したい:
ショートカットとして、「customerId」ではなく「id」を使用していることに注意してください。これは有効な JPQL ですか、それとも Hibernate でのみ有効ですか?
jakarta-ee - ManyToMany 関係からリストを返しますか?
ユーザーとロールの 2 つのテーブルがあります。ユーザーはより多くのロールを持つことができるため、これは ManyToMany の関係です。Netbeans を使用してエンティティ クラスを生成したところ、次のようになります。
(等)
ここに私の問題があります: テーブル内のすべてのユーザーを一覧表示し、各ユーザーのすべてのロールを一覧表示したいと考えています。解決策を思いつきませんでした。JPQL内からコレクションを参照するにはどうすればよいですか? コレクションを返却するにはどうすればよいですか? これはまったく可能ですか?
さらに悪いことに、JSF ページに結果を表示するために使用したい独自のクラスがあります。現在のクエリは次のとおりです。
これは、単純な属性と OneToOne の関係に対して機能します。ただし、ManyToMany ではありません。私はこのようにJOINしてみました:
...しかし、ランタイムは "r" の近くの不適切な構文と、r.roleName について不平を言いました。そして、単一のロールを返したかったのですが、ユーザーのすべてのロールが必要です!
私もSQLの専門家ではないので、解決策は単純である可能性は十分にあります...「Pro JPA 2...」の本を読んだ後でも、行き詰まっています。助けてくれてありがとう。
hibernate - 相違点Hibernate3.5/ JPA 2.0
これまでのところ、JPAには必要な重要な機能のいくつかが欠けていてHibernateが提供していたため、JPA 1.0ではなくHibernateを直接使用することを常に好みました。CriteriaAPI、第2レベルのキャッシュ、単方向のOneToManyなどです。
さて、JPA 2.0の登場とそれに付随し、JPA 1.0( http://en.wikibooks.org/wiki/Java_Persistence/What_is_new_in_JPA_2.0%3F)には当初欠けていたすべての新機能があるので、Hibernateを直接使用する必要があります。
あなたの意見は何ですか?JPA2.0ではできないHibernate3.5の残りの部分は何ですか?
hibernate - JPAエンティティに「グループ」という名前を付けることは違法ですか?
JPA 2.0 と Hibernate 3.5.2-Final をプロバイダー (および MySQL 5.1.41) として使用して、JEE6 アプリケーションを開発しています。私のアプリケーション サーバーは Glassfish V3.0.1 です。私はすでに、いくつかのエンティティと関係を備えた動作中の CRUD アプリを持っています。
ここで、「グループ」という名前の (非常に単純な) エンティティを追加しました。エンティティ クラスは次のようになります。
もちろん、persistence.xml にも追加しました<class>model.Group</class>
。私のpersistence.xmlは、デプロイ時にすべてのテーブルを削除して再作成します。
したがって、アプリケーションをデプロイすると、テーブル グループを除くすべてのエンティティのテーブルが生成されます。休止状態のログで、次のエラーを発見しました (アプリケーションのデプロイを妨げるものではありません)。
エンティティの名前を「MyGroup」のような名前に変更し (プロパティは同じまま)、それに応じて persistence.xml を変更し、アプリを再デプロイすると、テーブル「MyGroup」が正常に作成されます! MyGroup が正しく作成されたことを示す次の行がログに見つかりました。
誰が問題が何であるか考えましたか? Group を MyGroup に名前を変更することもできますが、実際に何が起こっているのか知りたいのです。「エンティティグループを呼び出さないでください」など、今すべき制限はありますか? しかし、もしそうなら、なぜ私が得たエラーはとても不明確なのですか?
java - @EmbeddedId を使用した JPA 複合キー
レガシー データベースには、Users、Workgroups、UsersWorkgroup の 3 つのテーブルがあります。UsersWorkgroup は、ユーザーがワークグループで持つロールを保存します。関連するコード スニペットは次のとおりです。
そしてもちろん、問題は、それが機能しないことです。現在、私はこの例外を受け取ります:
例外の説明: [class entity.Workgroup] と [class entity.UsersWorkgroup] の間で互換性のないマッピングが発生しました。これは通常、マッピングのカーディナリティがそのバックポインタのカーディナリティと一致しない場合に発生します。
OneToMany は ManyToOne と一致する必要があるため、わかりません... それとも、ManyToMany の関係ですか? @ManyToMany に切り替えると、次のようになります。
例外の説明: クラス [class com.ericsson.rsg.ejb.entity.UsersWorkgroup] の関係属性 [workgroup] のターゲット エンティティを特定できません。ジェネリックを使用しない場合は、ターゲット エンティティが関係マッピングで定義されていることを確認してください。
複合キー (埋め込み) を理解しようとしていますが、見つけたすべての例には、外部キーではない単純な列しかありません (しかし、それが複合キーの要点ですよね?)。UsersWorkgroup テーブルを密かに結合テーブルにすることはできますか?
PK クラスを厳密な POJO クラスとして宣言する必要がありますか? または @JoinColumn アノテーションを PK クラスに入れる必要がありますか? 別のテーブルから複合キー内の列を参照するにはどうすればよいですか? 参照するクラス コンストラクターで PK オブジェクトを初期化する必要がありますか?それとも不要ですか?
私は完全に立ち往生しているように感じます。
hibernate - EntityManager.find ではエンティティが見つかりませんが、Criteria API を使用すると見つかります
find
Java EE 6 で、エンティティのプライマリ ID とともにJPA EntityManager のメソッドを使用すると null が返されるというかなり奇妙なケースに遭遇しましたが、Criteria API を使用してその ID を持つすべてのエンティティを選択すると正常に動作します。
私が使用しているコードは次のfind
とおりです。
...そして、これが Criteria API で使用しているコードです。
なぜfind
nullを返すのにCriteriaがユーザーを見つけるのか考えていますか? プログラムのまったく同じ場所で、これら 2 つの代替方法を試しました。
User エンティティの関連部分は次のとおりです。
java - Hibernate 3.5.1、JPA2.0 & MySQL - 2 つの差分データベース / 同じサーバー内での代替動作
ORM 用に MySQL 5.1 サーバーと Hibernate 3.5.1 / JPA2 を実行しています。いくつかのテーブルを手動で削除するまで、すべて問題ないようです。それ以降、Hibernate が特定のテーブルを作成しなくなり、単体テストが失敗します。からのjdbc URLの変更
に
問題を解決します...いくつかのテーブルドロップを実行するまで:-( MySQLを本番環境に使用するので、これはまったく発生してはなりません.
dbjava をドロップしても役に立ちません。助言がありますか?
- - 追加情報:
本当におかしくなっています。mysql コンソールから:
え?テーブル「ca」はなぜ存在するのですか?!?!? 実際、それはかつて存在していました...それ以来、削除され、データベース全体が数回削除されました...なぜまだ存在するのですか?
さらに悪いことに:
完全に混乱しています...
しかし、私は何かに気付きました: 休止状態の私のテーブル名は、小文字と大文字 (キャメルケース) 表記を使用します。mysql は小文字のみを応答します。mysql が 2010 年に大文字と小文字を区別しないことを確認できる人はいますか?!?
java - JPAのHibernateまたはEclipseLink?
これらのフレームワークのいずれかの JPA2.0 実装の経験がある人がいるかどうか疑問に思っていましたか? 特に、EclipseLink をサポートする Spring3.x と一緒に。
これらのフレームワークと JPA2.0 を本番環境で使用していますか? 深刻な問題はありますか?