タグ付けされた質問 「jpa」

Java Persistence API(JPA)は、Javaオブジェクト/クラスとリレーショナルデータベース間のデータへのアクセス、永続化、および管理のためのJava仕様です。これはEJB 3.0仕様の一部であり、オブジェクトからリレーショナルへのマッピング(ORM)の業界標準アプローチです。



22
JPAとHibernateの違いは何ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 2年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 JPA 2は仕様であり、HibernateはORMのツールであることを理解しています。また、HibernateにはJPA 2よりも多くの機能があることを理解しています。しかし、実際的な観点から見ると、実際の違いは何ですか? iBatisの使用経験があり、現在HibernateまたはJPA2のいずれかを習得しようとしています。Pro JPA2の本を手に取りましたが、それでも「JPAプロバイダー」を参照し続けています。例えば: 機能を標準化する必要があると思われる場合は、発言してJPAプロバイダーにリクエストする必要があります。 これは私を混乱させるので、いくつか質問があります: JPA2を単独で使用すると、POJOに注釈を付けるだけでDBからデータをフェッチできます JPA2は、TopLinkやHibernateなどの「JPAプロバイダー」で使用することになっていますか?その場合、JPA2単独と比較した場合、またはHibernate単独と比較した場合、JPA2 + Hibernateを使用する利点は何ですか? あなたは良い実用的なJPA2本をお勧めできますか?「プロJPA2」は、聖書とJPA2のリファレンスのように見えます(本の後半までは、クエリには入りません)。JPA2への問題/解決アプローチを取る本はありますか?
680 java  hibernate  jpa  jakarta-ee  orm 



8
JPA @OneToManyアソシエーションを使用する場合の@JoinColumnとmappedByの違いは何ですか
違いは何ですか: @Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY) @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId") private List<Branch> branches; ... } そして @Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; ... }
516 java  hibernate  jpa  orm  one-to-many 

15
HibernateがMultipleBagFetchExceptionをスローします-複数のバッグを同時にフェッチできません
Hibernateは、SessionFactoryの作成中にこの例外をスローします。 org.hibernate.loader.MultipleBagFetchException:複数のバッグを同時にフェッチできない これは私のテストケースです: Parent.java @Entity public Parent { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy="parent", fetch=FetchType.EAGER) // @IndexColumn(name="INDEX_COL") if I had this the problem solve but I retrieve more children than I have, one child is null. private List<Child> children; } Child.java @Entity public Child { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; …
471 java  hibernate  jpa  one-to-many  bag 

4
完璧なJPAエンティティを作成する[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 私はしばらくの間JPA(実装Hibernate)を使用しており、エンティティを作成する必要があるたびに、AccessType、不変のプロパティ、equals / hashCodeなどの問題に悩まされています。 そこで、私は各問題の一般的なベストプラクティスを見つけ出して、個人用に書き留めることにしました。 しかし、誰かがそれについてコメントしたり、どこが間違っているかを教えたりしても構わないと思います。 エンティティークラス Serializableを実装する 理由:仕様では、そうする必要があると記載されていますが、一部のJPAプロバイダーはこれを強制していません。JPAプロバイダーとしてのHibernateはこれを強制しませんが、Serializableが実装されていない場合は、ClassCastExceptionで胃のどこかで失敗する可能性があります。 コンストラクタ エンティティのすべての必須フィールドを持つコンストラクタを作成します 理由:コンストラクターは、作成されたインスタンスを常に正常な状態にしておく必要があります。 このコンストラクターのほかに、パッケージのプライベートデフォルトコンストラクターがある 理由:Hibernateでエンティティを初期化するには、デフォルトのコンストラクターが必要です。プライベートは許可されますが、ランタイムプロキシの生成とバイトコードインスツルメンテーションなしの効率的なデータ取得には、パッケージプライベート(またはパブリック)の可視性が必要です。 フィールド/プロパティ 一般的にフィールドアクセスを使用し、必要に応じてプロパティアクセスを使用する 理由:どちらか一方について明確で説得力のある引数がないため、これはおそらく最も議論の余地のある問題です(プロパティアクセスとフィールドアクセス)。ただし、フィールドアクセスは、より明確なコード、より良いカプセル化、および不変フィールドのセッターを作成する必要がないため、一般的に好まれているようです 不変フィールドのセッターを省略(アクセスタイプフィールドには不要) プロパティはプライベートである可能性があります 理由:以前は(Hibernate)パフォーマンスの方がprotectedの方が優れていると聞きましたが、Webで見つけることができるのは:Hibernateがpublic、private、protectedのアクセサーメソッド、およびpublic、private、protectedフィールドに直接アクセスできることです。選択はあなた次第であり、アプリケーション設計に合うようにそれを一致させることができます。 Equals / hashCode エンティティを永続化するときにのみこのIDが設定されている場合は、生成されたIDを使用しないでください 優先度:不変の値を使用して一意のビジネスキーを形成し、これを使用して同等性をテストする 一意のビジネスキーを使用できない場合は、エンティティの初期化時に作成される非一時的なUUIDを使用します。詳細については、この素晴らしい記事を参照してください。 関連するエンティティ(ManyToOne)を参照しないでください。このエンティティ(親エンティティなど)をビジネスキーの一部にする必要がある場合は、IDのみを比較します。プロパティアクセスタイプを使用している限り、プロキシでgetId()を呼び出してもエンティティの読み込みはトリガーされません。 エンティティの例 @Entity @Table(name = "ROOM") public class Room implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue @Column(name …
422 java  hibernate  jpa  equals 

20
JPA hashCode()/ equals()のジレンマ
JPAエンティティーと、JPAエンティティークラスにどの/ 実装を使用する必要があるか について、ここでいくつかの議論がありました。それらのほとんど(すべてではない)がHibernateに依存していますが、JPA-implementation-neutrally(ちなみに私はEclipseLinkを使用しています)について説明したいと思います。hashCode()equals() 考えられるすべての実装には、以下に関する独自の長所と短所があります。 hashCode()/equals()契約準拠のため(不変性)List/ Setオペレーション 同一のオブジェクト(たとえば、異なるセッションから、遅延ロードされたデータ構造からの動的プロキシ)を検出できるかどうか エンティティがデタッチ(または非永続)状態で正しく動作するかどうか 私が見る限り、3つのオプションがあります。 それらを上書きしないでください。頼りにしObject.equals()てObject.hashCode() hashCode()/ equals()仕事 同一のオブジェクトを識別できない、動的プロキシの問題 エンティティの分離に問題はありません 主キーに基づいてそれらを上書きする hashCode()/ equals()壊れている 正しいID(すべての管理対象エンティティ) 分離されたエンティティに関する問題 Business-Idに基づいてそれらをオーバーライドします(非主キーフィールド。外部キーはどうですか?) hashCode()/ equals()壊れている 正しいID(すべての管理対象エンティティ) エンティティの分離に問題はありません 私の質問は: オプションやプロ/コンポイントを逃しましたか? どのオプションを選択しましたか、またその理由は何ですか? 更新1: 「によってhashCode()/ equals()壊れている」、私はその連続した意味hashCode()(正しく実装時)の意味で壊れされていない、異なる値を返す可能性があります呼び出しをObjectAPIドキュメント、しかしから変更されたエンティティを取得しようとしたときにこれは問題を引き起こすMap、 Setまたは他のハッシュベースCollection。その結果、JPA実装(少なくともEclipseLink)が正しく動作しない場合があります。 更新2: あなたの答えをありがとう-それらのほとんどは驚くべき品質を持っています。 残念ながら、どのアプローチが実際のアプリケーションに最適か、または自分のアプリケーションに最適なアプローチをどのように決定するかはまだわかりません。だから、私は質問を開いたままにし、いくつかの議論や意見を期待します。





4
混乱:JPAおよびHibernateでの@NotNullと@Column(nullable = false)
のフィールド/ゲッターに表示される場合、それら@Entityの違いは何ですか?(私はHibernateを通じてエンティティを永続化します)。 それぞれがどのフレームワークや仕様に属していますか? @NotNull内にありますjavax.validation.constraints。javax.validation.constraints.NotNulljavadocは言います 注釈付き要素はnullであってはなりません しかし、データベースでの要素の表現については触れていません。なぜnullable=false列に制約を追加するのでしょうか。

18
PersistentObjectException:JPAおよびHibernateによってスローされた永続化に渡された分離エンティティ
私は、多対1の関係が含まれているJPA永続化オブジェクトモデルを持っている:Account多くを持っていますTransactions。あTransactionに1つありAccountます。 コードのスニペットは次のとおりです。 @Entity public class Transaction { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @ManyToOne(cascade = {CascadeType.ALL},fetch= FetchType.EAGER) private Account fromAccount; .... @Entity public class Account { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToMany(cascade = {CascadeType.ALL},fetch= FetchType.EAGER, mappedBy = "fromAccount") private Set<Transaction> transactions; Accountオブジェクトを作成し、トランザクションを追加して、Accountオブジェクトを正しく永続化できます。しかし、トランザクションを作成するときは、既存の永続化されたアカウントを使用して、トランザクションを永続化します、私は例外を取得します: 原因:org.hibernate.PersistentObjectException:永続化のために渡された分離エンティティ:com.paulsanwald.Account at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141) したがって、Accountトランザクションを含むを永続化できますが、を含むトランザクションは永続化できませんAccount。これはAccount添付されていない可能性があるためだと思っていましたが、このコードでも同じ例外が発生します。 if …
237 java  hibernate  jpa  entity  persist 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.