JavaEE-Hibernateノート
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()は、唯一の対象を得て、洪水に参加して複数の記録に着きました。
マルチパラメータの連続置換、パラメータの設定
query by exampleがEMPを使用する場合、クエリ属性を作成する際には基本タイプ、例えばbollanは使用できません。パッケージタイプのBooleanを使用します。
関係マップ
関係(対象関係):1.one to one 2.many to one;one to may 3.many 4.継承関係
一対一:例えば、公民身分証、一つのオブジェクトは別のオブジェクト、もう一つのオブジェクトはこのオブジェクトを含む。
キー関連:両テーブルのメインキーは同じです。一つのテーブルのPKuidは関連テーブルのpkuidの一つのテーブルのメインキーは別のテーブルのメインキーです。このキーはメインキーでも外部キーです。
一つのテーブルのキーは、他のテーブルのキーを参照します。マッピングするときは、メインキーの生成方式です。
ペアの多関係マップ:
単一の関連(効率が高くない)は、一つの方向に複数のオブジェクトのセットを作成します。
この「一」は基礎データで、独立しています。あらかじめデータがあります。私たちの多くはこれを選ぶだけです。これはどれに属するかを規定しています。
自己相関(樹状構造()
例えば銀行です。銀行には上級銀行と子会社が含まれています。上級者はBankで、サブクラスはSetです。
継承マップ
表を作成し、オブジェクトをタイプにします。この列はオブジェクトにとって透明です。
設定する時は親のみでxmlを配置し、親の配置ではサブクラスを説明します。
サブクラスを表します
親クラスを巡回して、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()
基本的な手順
POJO対象-api-hibernate(hibernate.cfg.xml、*.hbm.xml)-jdbc-database
データベースの中でmy.iniのlogs=c:/xxxは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
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属性リスト:
サブセットの親レベルのカスケードに対する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()