JavaEE-Hibernateノート

8097 ワード

hibernateシステム構造
基本的な手順
POJO対象-api-hibernate(hibernate.cfg.xml、*.hbm.xml)-jdbc-database
データベースの中でmy.iniのlogs=c:/xxxはsqlが歴史を検索することができます。
  • 単一オブジェクトクエリ、getとロードの違い
  • getはsql文で実行され、無しで空に戻ります。loadは対象を積載して遅延負荷を採用し、setXXXに相当します。空では積載できないとObject NotFoundに戻ります。また、getはsql文を実行しています。sqlを印刷します。アクセスしない属性もsqlを読みます。また、ロードは、超見つかったオブジェクトのプロパティを読み込まないと、sqlは印刷されません。読み込む時にのみ印刷されます。
    Queryの中でquery.uniqueResult()は、唯一の対象を得て、洪水に参加して複数の記録に着きました。
    マルチパラメータの連続置換、パラメータの設定
       ,   ,     (  , )
    sesssion.createQuery(?).setParameter(0,4).setParameter(1,4)
    
       ,            
    setParameter(  , );
    session.createQuery(:id).setParameter("id", )
    
       ,     ,map  ,map          ,         
    Map param = new HashMap();
    param.put("uid",5); map    :uid         。
    
    Query q.setProperties(param(Map  ))
    
       :javaBean  ,  ,   :xxx  XXX             
    User userParam = new User();
    userParam.setName("");
    userParam.setGender(false);
    
    Query q.setProperties(userParam).list();
    
    
    ;
    
    
    hql = "select new User(id,name) from User u ";
                  id name   ,,          
     
    hql = "select id,name from User u";
          object[]
    List list = q.list();
    
         
    Iterator us = session.createQuery(hql).iterate();
         id,         ,  id。
    
    
    
        
    Criteria c = session.createCriteria(User.class);
    
    List us = c.list();
    
          
    
    c.add(Restrictions.eq("    ",     ));
    
    Restrictions.or("name",name),Restrictions.eq("gender",false);
    c.list();
    
        not(eq());
    QBEクエリ
    query by exampleがEMPを使用する場合、クエリ属性を作成する際には基本タイプ、例えばbollanは使用できません。パッケージタイプのBooleanを使用します。
    関係マップ
    関係(対象関係):1.one to one 2.many to one;one to may 3.many 4.継承関係
    一対一:例えば、公民身分証、一つのオブジェクトは別のオブジェクト、もう一つのオブジェクトはこのオブジェクトを含む。
    キー関連:両テーブルのメインキーは同じです。一つのテーブルのPKuidは関連テーブルのpkuidの一つのテーブルのメインキーは別のテーブルのメインキーです。このキーはメインキーでも外部キーです。
    一つのテーブルのキーは、他のテーブルのキーを参照します。マッピングするときは、メインキーの生成方式です。
    "foreign">
        "property">husband(          )
    "           " class="          ">
    
           ORM       ;
    
        
    h.setWife(w);
    w.setHusband(h);
    
    session.save(h);
    session.save(w);
    一対一の方法2:唯一の外鍵関連は、メインテーブルの中に外鍵を作成します。この外鍵は別のテーブルのメインキーです。(唯一の外鍵は、この外鍵にunique属性を追加しますか?)
    ペアの多関係マップ:
    単一の関連(効率が高くない)は、一つの方向に複数のオブジェクトのセットを作成します。
    "              " table="            "  inverse="true"true,                   。      。>
    
        "one       ">
        "many        "/>
    "    “ ”      " column="one      " class="">
    多いのは1対に対して、実は1対の多い特殊な情況です。
    この「一」は基礎データで、独立しています。あらかじめデータがあります。私たちの多くはこれを選ぶだけです。これはどれに属するかを規定しています。
    自己相関(樹状構造()
    例えば銀行です。銀行には上級銀行と子会社が含まれています。上級者はBankで、サブクラスはSetです。
    "parentBank" column="fk_bank_id" class="com.wang.model.Bank">
    
    
        
    
        "childBank" table="t_bank" cascade="all" inverse="true">
        
        "fk_bank_id">
        "com.wang.model.Bank"/>
        
    多対多
    "        (Set)" table="         ">
    "            ">
    "                   " class="                 ">
    
    多くの問い合わせに対してselect x.set from YY種類xx where xt.name="
    継承マップ
    表を作成し、オブジェクトをタイプにします。この列はオブジェクトにとって透明です。
    設定する時は親のみでxmlを配置し、親の配置ではサブクラスを説明します。
    サブクラスを表します
    "" column = "">
        "identity">
    
    
    
    "       ,   F,D,    。">
    
    "      " column="">
    
    "      1" discriminator-value="   type    ,      " >
        "      " column="      ">
    
    
         
    "      2" discriminator-value="   type    ,      " >
        "      " column="      ">
    
    
    調べてみると、すべてのxxxオブジェクト(親クラスの他のすべてのサブクラスのオブジェクト)を調べ、直接に親クラスに対して調べます。調べた異なるサブクラスに対して異なる操作をします。
    親クラスを巡回して、instance ofの具体的なサブクラスを使って操作することができます。
    From java.lang.Objectはマッピング構成において、一級データベースに存在するすべてのオブジェクトを検索できます。
    カスケードオブジェクトのcascade属性リスト:
  • none:他の関連オブジェクトを無視する
  • save-upadate:save()udate()及びsaveOrUpdate()カスケードを通じて新規作成一時オブジェクトを保存すると、更新-遊離オブジェクト
  • persist:カスケード保存新規オブジェクト
  • merge:現在のオブジェクトを融合させる場合、連結はすべての関連する遊離オブジェクト
  • を融合させる。
  • delete:カスケードからすべての関連オブジェクトを削除する
  • ロック:ロック?
  • replicate:現在のオブジェクトを割り当てると、関連するすべてのオブジェクト
  • がカスケードコピーされます。
  • evict:対象を明らかにすると、カスケードがクリアされます。
  • refresh:リフレッシュとは、データベースにおける応答データ(refsh(方法)を読み出し、関連するすべてのオブジェクトをカスケード更新し、データベースの最新データを用いてSessionキャッシュにおける応答オブジェクトを同期させることである。
  • all
  • delete-orphanは、現在のカスケード関係を解除したすべてのオブジェクト
  • を削除します。
  • all-delete-orphan、allとdelete-orphan
  • を含みます。
    サブセットの親レベルのカスケードに対するmany-to-oneのcascadeはnoneの方がいいです。余分なudate文は避けてください。
    事物の提出、tx.com mmit()は、ほぼSessionキャッシュを整理する手段であり、応答データを更新または追加または削除する手段である。
    バッチ処理:mysqlはセーブプロセスによって一括更新や一括削除ができません。
    sessionによる一括操作には以下の制約があります。1.プロファイルでは、hibernate.jdbc.batchize=20を設定します。2.オブジェクトがidentity識別子生成器を採用していると、HiberneteはJDBC層で一括挿入操作ができません。バッチ操作の場合は、セカンダリキャッシュを閉じることをおすすめします。
    バッチ挿入:オブジェクト識別子生成器はidentity if(i%20==0){session.flust();session.clear();
    HQLを使ってデータを一括操作します。更新と削除は同じです。
    ロット挿入に注意
    insert into Enttity Name propertiest selectment;EnttityNameは恒久化類の名前を表し、propertiestは恒久化類の属性リストを表し、select ustamentはサブクエリ文を表します。HQLはinsert into...selectをサポートします。insert invaluesはサポートしません。
    例:CustsmoersテーブルのデータをDelinquent uAcceountテーブルのinsert into DelinquentAccent(id,name)select c.id,c.name from Customer c.where c.id>1にコピーする。
    int created Entties=session.reateQuery.executeUpdate()