JPAをプレーンJDBCdao実装と混合すると、どのような問題が発生する可能性がありますか?

ギリ

異なるテクノロジーを使用して同じデータベースにアクセスしたい2つのチームがあります。1つはJPA(具体的にはHibernate)を使用します。もう1つはプレーンJDBCを使用します。

各チームが各テクノロジーのデフォルト構成や「ベストプラクティス」を使用していると仮定して、懸念事項のリストを作成するように依頼されました。

これは新しいデータベースであるため、スキーマがJPAチームのみ、またはJDBCチームのみによって設計されていると想像してください。その後、両方がデータベースにアクセスしようとします。

あなたの経験を共有していただけますか?

更新:私はここで意見を求めていません。JPAとJDBCのどちらが「優れている」かは関係ありません。2つのテクノロジーを組み合わせる際の相互運用性に関する懸念事項の客観的なリストを求めています。


これが私が探しているものの例です:

シナリオ:ユーザーが行を読み取り、メモリ内で変更して、データベースに保存し直します。

  • JPAversionが各テーブルに列を追加することにより、楽観的ロックを使用する場合
  • トランザクションがコミットされると、JPAは、行が読み取られてから更新されるまでの間にバージョンが変更されたかどうかを確認します。バージョンが変更された場合、例外がスローされます。そうでない場合は、コミットを続行できます。
  • JDBC実装がテーブルロック(別名ペシミスティックロック)を使用する場合、それらはSELECT ... FOR UPDATE同時更新を防ぐために使用します。
  • JDBC実装がJPA規則を認識せずversion、コミット時に更新さない場合に何が起こるか想像してみてください

    1. JPAはを使用SELECTして行を読み取り、version1に等しいことを確認します。
    2. JDBCは、を使用して行を読み取りますSELECT ... FOR UPDATE
    3. JDBCは、をインクリメントせずに行を更新します(トランザクションをコミットします)version
    4. JPAは行の更新を試みます。versionはまだ1に等しいため、コミットは実行されます
    5. JPA(ステップ4)は、JDBCの更新(ステップ3)を破壊しました。

教訓:JDBC実装は、versionを更新することを知っている必要があります。

ギリ

他の人が答えるのを待っている間に自分のリストを作成する:

  1. JPAは、デフォルトでオプティミスティックロックを使用します。これには、バージョン列を追加し、行が更新されるたびにそれをインクリメントする必要があります。JDBCも同じことをする必要があります。
  2. 発散したDAOレイヤーは、発散したモデルになる可能性が高くなります。つまり、JPAマッピング構成が変更されるたびに、対応するJDBCコードがサイレントに中断する可能性があります。
  3. JPAがカスケードルールを使用して更新または削除を伝播する場合。JDBCは同じことをする必要があります。
  4. JPA@Id @GeneratedValue(strategy=GenerationType.SEQUENCE)を使用する場合は、シーケンステーブルを作成して使用します(例hibernate_sequence)。JDBCも同じことをする必要があります。
  5. JDBCは、JPAクラス継承テーブルをサポートする必要があります。
  6. JPAがスキーマの進化を推進する場合、JDBC実装はその規則/機能のサポートを追加する必要があります。一方、JDBCがスキーマの進化を促進する場合は、スキーマに影響を与えるJPA機能を無効にする必要があります。
  7. データがJPAの外部で変更された場合、JPAの第2レベルのキャッシュを使用できません(crizzisの提供

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CakePHPのJsonデータ型を使用するとどのような脆弱性の問題が発生する可能性がありますか?

分類Dev

このユースケースでGCDdispatchAfter()を使用するとどのような問題が発生する可能性がありますか

分類Dev

ASP.NET Core- [FromServices]属性を使用すると、どのような課題や問題が発生する可能性がありますか?

分類Dev

他の国/地域からWindows10を購入すると、どのような問題が発生する可能性がありますか?

分類Dev

.NET Core 2でMicrosoft.AspNetCore.Allを使用すると、どのような問題が発生する可能性がありますか?

分類Dev

関数内で関数を呼び出すと、どのような問題が発生する可能性がありますか?

分類Dev

静的ライブラリと動的ライブラリの両方を同じ実行可能ファイルにリンクすると、どのような問題が発生する可能性がありますか?

分類Dev

MySQLの整数フィールドで引用符付きの数値(文字列)を使用してクエリを実行すると、どのような問題が発生する可能性がありますか

分類Dev

.vsssccファイルと.vspsccファイルをソース管理にチェックインするとどのような問題が発生する可能性がありますか?

分類Dev

カーネルのアップグレード後に再起動しないと、問題が発生する可能性がありますか?

分類Dev

`lru_cache`で装飾された関数に可変引数を使用するとどのような問題が発生する可能性がありますか?

分類Dev

Active Directoryに対して認証するすべてのLinuxサーバーに同じキータブを使用すると、どのような問題が発生する可能性がありますか?

分類Dev

npmリンクが原因でモジュールが見つからないという問題が発生する可能性がありますか?

分類Dev

Angular / Ionic-コードの公開によりどのような問題が発生する可能性がありますか?

分類Dev

SwiftJSONEncoderでエンコードするとどのようなエラーが発生する可能性がありますか

分類Dev

UITabbarControllerをUINavigationController内に配置します。どのような問題が発生する可能性がありますか?

分類Dev

Algol 68では、制御構造に逆クロージャワードを使用すると、どのような読みやすさの問題が発生する可能性がありますか?

分類Dev

java.util.HashSets contains()メソッドをオーバーライドすることでどの問題が発生する可能性がありますか?

分類Dev

Twitter Bootstrapのツールチップ内でHTMLを許可すると、XSSの問題がどのように発生する可能性がありますか?

分類Dev

Windowsの場合ローカル管理者グループにドメインアカウントを追加します。どのような問題が発生する可能性がありますか?

分類Dev

Angularコンポーネントテンプレートで単純なメソッドを呼び出すと、パフォーマンスの問題が発生する可能性がありますか?

分類Dev

本番環境でActionCableを使用すると、パフォーマンスの問題が発生する可能性がありますか?

分類Dev

Java 8:addall 2 回の後に重複を削除すると、同時実行の問題が発生する可能性がありますか?

分類Dev

この機能でどのような問題が発生する可能性があるかを説明します(ある場合)

分類Dev

2つのfloatを追加しようとすると、不可逆な変換エラーが発生する可能性がありますか?

分類Dev

複数のPythonプロセスが.pycファイルを作成すると問題が発生する可能性がありますか?

分類Dev

Eigen :: Matrixから同じマトリックスの別のブロックにブロックをコピーする場合、どのようなエイリアシングの問題が発生する可能性がありますか?

分類Dev

「entityManagerFactory」という名前のBeanの作成中にエラーが発生しました。それはどのような問題になる可能性がありますか?

分類Dev

CollapsingToolbarLayout-expandedTitleTextAppearanceとcollapsedTitleTextAppearanceを設定すると、問題が発生する可能性があります

Related 関連記事

  1. 1

    CakePHPのJsonデータ型を使用するとどのような脆弱性の問題が発生する可能性がありますか?

  2. 2

    このユースケースでGCDdispatchAfter()を使用するとどのような問題が発生する可能性がありますか

  3. 3

    ASP.NET Core- [FromServices]属性を使用すると、どのような課題や問題が発生する可能性がありますか?

  4. 4

    他の国/地域からWindows10を購入すると、どのような問題が発生する可能性がありますか?

  5. 5

    .NET Core 2でMicrosoft.AspNetCore.Allを使用すると、どのような問題が発生する可能性がありますか?

  6. 6

    関数内で関数を呼び出すと、どのような問題が発生する可能性がありますか?

  7. 7

    静的ライブラリと動的ライブラリの両方を同じ実行可能ファイルにリンクすると、どのような問題が発生する可能性がありますか?

  8. 8

    MySQLの整数フィールドで引用符付きの数値(文字列)を使用してクエリを実行すると、どのような問題が発生する可能性がありますか

  9. 9

    .vsssccファイルと.vspsccファイルをソース管理にチェックインするとどのような問題が発生する可能性がありますか?

  10. 10

    カーネルのアップグレード後に再起動しないと、問題が発生する可能性がありますか?

  11. 11

    `lru_cache`で装飾された関数に可変引数を使用するとどのような問題が発生する可能性がありますか?

  12. 12

    Active Directoryに対して認証するすべてのLinuxサーバーに同じキータブを使用すると、どのような問題が発生する可能性がありますか?

  13. 13

    npmリンクが原因でモジュールが見つからないという問題が発生する可能性がありますか?

  14. 14

    Angular / Ionic-コードの公開によりどのような問題が発生する可能性がありますか?

  15. 15

    SwiftJSONEncoderでエンコードするとどのようなエラーが発生する可能性がありますか

  16. 16

    UITabbarControllerをUINavigationController内に配置します。どのような問題が発生する可能性がありますか?

  17. 17

    Algol 68では、制御構造に逆クロージャワードを使用すると、どのような読みやすさの問題が発生する可能性がありますか?

  18. 18

    java.util.HashSets contains()メソッドをオーバーライドすることでどの問題が発生する可能性がありますか?

  19. 19

    Twitter Bootstrapのツールチップ内でHTMLを許可すると、XSSの問題がどのように発生する可能性がありますか?

  20. 20

    Windowsの場合ローカル管理者グループにドメインアカウントを追加します。どのような問題が発生する可能性がありますか?

  21. 21

    Angularコンポーネントテンプレートで単純なメソッドを呼び出すと、パフォーマンスの問題が発生する可能性がありますか?

  22. 22

    本番環境でActionCableを使用すると、パフォーマンスの問題が発生する可能性がありますか?

  23. 23

    Java 8:addall 2 回の後に重複を削除すると、同時実行の問題が発生する可能性がありますか?

  24. 24

    この機能でどのような問題が発生する可能性があるかを説明します(ある場合)

  25. 25

    2つのfloatを追加しようとすると、不可逆な変換エラーが発生する可能性がありますか?

  26. 26

    複数のPythonプロセスが.pycファイルを作成すると問題が発生する可能性がありますか?

  27. 27

    Eigen :: Matrixから同じマトリックスの別のブロックにブロックをコピーする場合、どのようなエイリアシングの問題が発生する可能性がありますか?

  28. 28

    「entityManagerFactory」という名前のBeanの作成中にエラーが発生しました。それはどのような問題になる可能性がありますか?

  29. 29

    CollapsingToolbarLayout-expandedTitleTextAppearanceとcollapsedTitleTextAppearanceを設定すると、問題が発生する可能性があります

ホットタグ

アーカイブ