Jpa ORM標準コース#4

3013 ワード

プロキシサーバ



  • 時にはメンバーを連れてきたいだけ

  • プロキシを使用する場合は、使用時にインポートします.
  • em.find(), em.getReference()


  • Em.find():直接データベースにアクセスしてデータを取得する

  • Em.getReference():エージェントによってインポートされます.ダミークラス
  • プルーズランド


  • 実際のクラスの継承と作成

  • 外見が同じ


  • 実際のメンバーをインポートするのではなく、インポートしたメンバーによって間接的にアクセスします.

  • em.findを使用してメンバーを事前に見つけた場合、proxyを作成する必要はなく、永続性コンテキストのメンバーをインポートします.

  • Proxyが作成された場合、em.clear()にproxyを検索させるとクエリーできません.

  • m1 = em.find(member)
    m2 = em.getReference(member)
    以上のように、両方が同時に見つかった場合、m 1=m 2を移動させる.(何を言っているのかわかりませんが)
  • ディレイロード


  • プロキシクエリとしてのLaZYの遅延ロード

  • 実際のTeam使用時初期化
    ----->メンバーとチームが別々に照会します.

  • ほとんど一緒に使うのであればEAGERを使って一緒に検索するべきです.
  • 実際の操作では、遅延ロードのみが使用されます。

  • すぐにロードすると、予期せぬSQL
  • が発生します.
    @ManyToOne,@OneToOneはDefaultをEAGER->LAZYに変更する必要があります.
    @OneToMany,@ManyToManyデフォルトはLAZY
  • JPQLによるN+1問題
    em.createQuery(「select m from Memberm」)では、メンバーを問い合わせるとTeamクエリーも一緒に表示されます
  • CASCADEでの永続的な変換


    親Entityを保存する場合、子Entityも一緒に保存する場合に使用します.
    Parent.class
    @OneToMany(mappedBy="parent", cascade=CascasType.PERSIST)
    private List<Child> childList;
    上記の場合、parentを作成すると、サブレベルも作成されます.

  • 永続的な移行はマッピング関連関係とは何の関係もありません.

  • エンティティを永続化する場合、関連するエンティティも、これらだけでなく、一緒に永続化する便利さを提供します.

  • ALL、PERSISTは通常2つしか使用されません.
    ->PERSIST:保存時のみ調整

  • ChildがParentとしてのみ管理されている場合はどうでもいいが、Childが他のEntityとして管理を追加している場合は使用すべきではない.(所有者が1人しかいない場合)
    ->単一のエンティティに属している場合にのみ使用

  • ライフサイクルが同じ

  • 単一所有者の場合
  • 使用のみ

    孤立オブジェクト


    親エンティティに関連付けられていない自動エンティティを自動的に削除します.orphanRemoval = true
    Parent.class
    @OneToMany(mappedBy="parent", cascade=CascasType.PERSIST,orphanRemoval = true)
    private List<Child> childList;

  • Cascade=CascasType.ALL,orphanRemoval = true
    以上のようにALL,trueを与えると,親エンティティによって子どものライフサイクルを管理することができる.
    (子の作成、削除、クエリーは親エンティティで行えます.親エンティティは永続性コンテキストで管理でき、子エンティティは親で管理できます.ドメインマスター(DDD)では便利です.)
  • 孤児対象はCASCADEと同じ,

  • ライフサイクルが同じ

  • 単一所有者の場合
  • 使用します.
  • の概念から言えば、親が取り除かれると、子供は孤児になり、子供も一緒に取り除かれる.だからこれはCascadeTypeREMOVEのように動作する