锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 瀵瑰簲SQL “field=value”琛ㄨ揪寮?/p>
濡傦細Expression.eq("name","Erica") 瀵瑰簲SQL“between”琛ㄨ揪寮?/p>
濡傦細Expression.between("age",new Integer(13),new Integer(50)); and鍏崇郴緇勫悎錛屽錛?/p>
Expression.add(Expression.eq("name","Erica"),Expression.add("sex",new Integer(1))) or鍏崇郴緇勫悎錛屽錛?/p>
Expression.or(Expression.eq("name","Erica"),Expression.add("sex",new Integer(1))) 浣滀負琛ュ厖錛屾湰鏂規硶鎻愪緵浜嗗師鐢烻QL璇硶鐨勬敮鎸侊紝鎴戜滑鍙互閫氳繃榪欎釜鏂規硶鐩存帴閫氳繃SQL璇彞闄愬畾鏌ヨ鏉′歡 涓嬮潰鐨勪唬鐮佽繑鍥炴墍鏈夊悕縐頒互"Erica"鍏跺疄鐨勮褰曪細 涓婁緥瀵瑰綋鍓嶇殑TUser璁板綍鎸夌収騫撮緞榪涜鍒嗙粍銆傞氳繃Projections.groupProperty鏂規硶錛屾垜浠寚瀹氫簡鐢ㄤ簬鍒嗙粍鐨勭洰鏍囧睘鎬?#8220;age”銆傜敓鎴愮殑SQL璇彞錛歴elect this.age as y0_ from T_User this_group by this_.age銆?br />
鍙﹀錛屽浜庡鏉′歡緇勫悎鐨勭粺璁°佸垎緇勫姛鑳斤紝鎴戜滑鍙互鍊熷姪ProjectionList瀹屾垚錛屼笅闈㈢殑渚嬪瓙涓紝鎴戜滑緇熻浜嗗悇涓勾榫勫眰嬈′腑鐨勭敤鎴鋒暟閲忥細
]]>Criteria criteria=session.createCriteria(TUser.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1));
Criteria鏌ヨ琛ㄨ揪寮?br />
Criteria鏈韓鍙槸涓涓鍣紝鍏蜂綋鐨勬煡璇㈡潯浠惰閫氳繃Criteria.add鏂規硶娣誨姞鍒癈riteria瀹炰緥涓?br />
鏂規硶
鎻忚堪
Expression.eq
Expression.allEq
鍙傛暟涓轟竴涓狹ap瀵硅薄錛屽叾涓寘鍚簡澶氫釜灞炴?鍊煎搴斿叧緋匯傜浉褰撲簬澶氫釜Expression.eq鍏崇郴鐨勫彔鍔?/td>
Expression.gt
瀵瑰簲SQL“field>value”琛ㄨ揪寮?/td>
Expression.ge
瀵瑰簲SQL“field>=value”琛ㄨ揪寮?/td>
Expression.lt
瀵瑰簲SQL“field<value”琛ㄨ揪寮?/td>
Expression.le
瀵瑰簲SQL“field<=value”琛ㄨ揪寮?/td>
Expression.between
Expression.like
瀵瑰簲SQL"field like valule"琛ㄨ揪寮?/td>
Expression.in
瀵瑰簲SQL“field in...”琛ㄨ揪寮?/td>
Expression.eqproperty
鐢ㄤ簬姣旇緝涓や釜灞炴т箣闂寸殑鍊鹼紝瀵瑰簲SQL“field>field”
Expression.gtProperty
鐢ㄤ簬姣旇緝涓や釜灞炴т箣闂寸殑鍊鹼紝瀵瑰簲SQL“field>=field”
Expression.ltProperty
鐢ㄤ簬姣旇緝涓や釜灞炴т箣闂寸殑鍊鹼紝瀵瑰簲SQL"field<field"
Expression.leProperty
鐢ㄤ簬姣旇緝涓や釜灞炴т箣闂寸殑鍊鹼紝瀵瑰簲SQL"field<=field"
Expression.and
Expression.or
Expression.sql
Expression.sql("lower({alias}.name) like lower(?)","Erica%",Hibernate.STRING);
鍏朵腑鐨?{alias}"灝咹ibernate鍦ㄨ繍琛屾湡浣跨敤褰撳墠鍏寵仈鐨凱OJO鍒悕鏇挎崲
鍦℉ibernate3涓紝寮曞叆浜哛estrictions綾諱綔涓篍xpression鐨勬浛浠c?br />
紺轟緥鏌ヨ
Example綾誨疄鐜頒簡Criteria鎺ュ彛錛屽悓鏍鳳紝瀹冧篃鍙互鐢ㄤ綔Criteria鐨勬煡璇㈡潯浠躲侲xample鐨勪綔鐢ㄦ槸錛氭牴鎹凡鏈夊璞★紝鏌ユ壘灞炴т笌涔嬬浉絎︾殑鍏朵粬瀵硅薄銆?br />
Criteria criteria=session.CreateCriteria(TUser.class);
TUser exampleUser=new TUser();
exapleUser.getName("Erica");
criteria.add(Example.create(exampleUser));
List<TUser> list=criteria.list();
for(TUser user:list){
System.out.println(user.getName());
}
澶嶅悎鏌ヨ
Criteria criteria=session.createCriteria(TUser.class);
Criteria addrCriteria=criteria.createCriteria("addresses");
addrCriteria.add(Expression.like("addresses","%shanghai%"));
List<TUser> list = criteria.list();
for(TUser user:list){
System.out.println(user.getName());
Set<TAddress> addrSet=user.getAddresses();
for(TAddress addr:addrSet){
System.out.println(addr.getAddress());
}
}
DetachedCriteria
Hibernate2涓紝Criteria鐢熷懡鍛ㄦ湡浣嶄簬鍏跺涓籗ession鐢熷懡鍛ㄦ湡涓紝涔熷氨鏄錛岀敱鏌愪釜session鍒涘緩鐨凜riteria瀹炰緥錛屼竴鏃ession閿姣侊紝閭d箞姝riteria瀹炰緥涔熼殢涔嬪け鏁堛?br />
Hibernate3涓紩鍏ヤ簡DetachedCriteria錛孌etachedCriteria鍙互鑴辯session瀹炰緥鐙珛瀛樺湪錛岃繖鏍鳳紝鎴戜滑灝卞彲浠ュ皢鏌愪簺閫氱敤鐨凜riteria鏌ヨ鏉′歡榪涜鎶界錛屾瘡嬈′嬌鐢ㄦ椂鍐嶄笌褰撳墠session瀹炰緥緇戝畾浠ヨ幏寰楁洿濂界殑浠g爜閲嶇敤鏁堟灉銆?br />
DetachedCriteria deCriteria=DetachedCriteria.forClass(TUser.class);
deCriteria.add(Expression.eq("name","Erica"));
deCriteria.add(Expression.eq("sex",new Integer(1)));
Criteria criteria=deCriteria.getExecutableCriteria(session);
List<TUser> list=criteria.list();
for(TUser user:list){
System.out.println(user.getName());
}
DetachedCriteria aveAge=DetachedCriteria.forClass(TUser.class);
avgAge.setProjection(Projections.avg("age"));
Criteria criteria=session.createCriteria(TUser.class);
criteria.add(Subqueries.propertyGT("age",avgAge));
Criteria楂樼駭鐗規?br />
闄愬畾榪斿洖鐨勮褰曡寖鍥?/strong>
閫氳繃criteria.setFirstResult/setMaxResults鏂規硶鍙互闄愬埗涓嬈℃煡璇㈣繑鍥炵殑璁板綍鑼冨洿錛?br />
Criteria criteria=session.createCriteria(TUser.class);
//闄愬畾鏌ヨ榪斿洖媯绱㈢粨鏋滀腑錛屼粠100鏉$粨鏋滃紑濮嬬殑20鏉¤褰?/span>
criteria.setFirstResult(100);
criteria.setMaxResults(20);
//
//
Criteria criteria=session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
鍒嗙粍涓庣粺璁?br />
鍦℉ibernate3涓紝鎴戜滑榪樺彲浠ラ氳繃Criteria瀹屾垚鍒嗙粍鍜岀粺璁°傚垎緇勩佺粺璁¤〃杈懼紡鐢盚ibernate3鏂板紩鍏ョ殑Projections Class榪涜灝佽銆?br />
Criteria criteria=session.createCriteria(TUser.class);
criteria.setProjection(Projections.groupProperty("age"));
List<TUser> list=criteria.list();
for(TUser user:list){
System.out.println(user);
}
ProjectionList projectionlist=Projections.ProjectionList();
projectionList.add(Projections.groupProperty("age"));
projectionList.add9Projections.rowCount());
Criteria criteria=session.createCriteria(TUser.class);
criteria.setProjection(projectionList);
]]>
涓婚敭鍏寵仈錛?/strong>鍗充袱寮犺〃閫氳繃涓婚敭褰㈡垚涓瀵逛竴鏄犲皠鍏崇郴銆?/p>
鐢ㄦ埛TUser涓庢姢鐓Passport鍏寵仈
TUer.hbm.xml
<hibernate-mapping>
<class
name="
TUser"
table="T_User">
<one-to-one
name="passport"
class="
TPassport"
cascade="all"
outer-join="true"/>
</class>
</hibernate-mapping>
TPassport.hbm.xml
<hibernate-mapping>
<class
name="
TPassport"
table="T_Passport">
<one-to-one
name="user"
class="
TUser"
constrain="true">
.
</class>
</hibernate-mapping>
嫻嬭瘯浠g爜錛?br />
TUser user = new TUser();
user.setAge(new Integer(20));
user.setName("Carin");
TPassport passport = new TPassport();
passport.setSerial("PCN759386");
passport.setExpiry(new Integer(20080101));
//鐩鎬簰璁劇疆鍏寵仈
passport.setUser(user);
user.setPassport(passport);
Transaction tx = sessioin.beginTransaction();
//鐢變簬TUser綾葷殑one-to-one鑺傜偣琚緗垚
//cascade=“all”鍏跺叧鑱旂殑passport瀵硅薄灝嗚綰ц仈淇濆瓨
session.save(user);
tx.commit();
TUser user=(TUser)Hibernate.load(TUser.class,new Integer(15));
System.out.println("User name=>"+user.getName());
System.out.println("Passport Serial=>"+user.getPassport().getSerial());
Hibernate:select tuser0_.id as id1_,
from T_USER tuser0_
left outer join
T_PASSPORT tpassport1_ on tuser0_.id=tpassport1_.id
where tuser0_.id=?
User name=>Carin
Passport Serial=>PCN759386
涓瀵瑰鍏寵仈
鐢ㄦ埛TUser鍜屽湴鍧TAddress鐨勪竴瀵瑰鍏寵仈銆?br />
鍗曞悜涓瀵瑰鍏寵仈
涓繪帶鏂筎User鐨勬槧灝勯厤緗細
<hibernate-mapping>
<class
name="
TUser"
table="t_user"
dynamic-update="true"
dynamic-insert="true">
.
<set
name="address"
table="t_address"
cascade="all"
order-by="zipcode asc">
<key column="user_id"/>
<one-to-many class="
TAddress">
</set>
</class>
</hibernate>
鍙屽悜澶氬涓鍏寵仈
瀹為檯涓婃槸“涓瀵瑰”涓?#8220;澶氬涓”鍏寵仈鐨勭粍鍚堛備篃灝辨槸璇存垜浠繀欏誨湪涓繪帶鏂歸厤緗竴瀵瑰鍏崇郴鐨勫熀紜涓婏紝鍦ㄨ鎺ф柟閰嶇疆涓庡叾瀵瑰簲鐨勫瀵逛竴鍏寵仈銆?br />
TUser.hbm.xml
<hibernate-mapping>
<class
name="
TUser"
table="t_user"
dynamic-update="true"
dynamic-insert="true">
.
<set
name="address"
table="t_address"
lazy="false"
inverse="true"
cascade="all"
sort="unsorted"
order-by="zipcode asc">
<key column="user_id"/>
<one-to-many class="
TAddress"/>
</set>
.
</class>
</hibernate>
<hibernat-mapping>
<class
name="
TAddress"
table="t_address"
dynamic-update="false"
dynamic-insert="false">
.
<many-to-one
name="user"
class="TUser"
cascade="none"
outer-join="auto"
update="true"
insert="true"
access="property"
column="user_id"
not-null="true"/>
.
</class>
</hibernate-mapping>
澶氬澶氬叧鑱?br />
闇瑕佸熷姪涓棿琛ㄦ潵瀹屾垚澶氬澶氭槧灝勪俊鎭殑淇濆瓨銆?br />
鐢變簬澶氬澶氬叧鑱旂殑鎬ц兘涓嶄匠錛堢敱浜庡紩鍏ヤ簡涓棿琛紝涓嬈¤鍙栨搷浣滈渶瑕佸弽澶嶅嬈℃煡璇級錛屽洜姝ゅ湪璁捐涓簲璇ラ伩鍏嶅ぇ閲忎嬌鐢ㄣ傚悓鏃訛紝鍦ㄥ瀵瑰鍏崇郴涓紝搴旀牴鎹儏鍐碉紝閲囧彇寤惰繜鍔犺澆鏈哄埗鏉ラ伩鍏嶆棤璋撶殑鎬ц兘寮閿銆?br />
TGroup涓嶵Role鐨勫瀵瑰鍏寵仈錛?br />
TGroup.hbm.xml錛?br />
<hibernate-mapping>
<class
name="
TGroup"
table="t_group"
dynamic-update="false"
dynamic-insert="false">
.
<set
name="roles"
table="t_group_role"
lazy="false"
inverse="false"
cascade="save-update">
<key column="group_id"/>
<many-to-many
class="
TRole"
column="role_id"/>
</set>
.
</class>
</hibernate>
TRole.hbm.xml錛?br />
<hibernate-mapping>
<class
name="
TRole"
table="t_role"
dynamic-update="false"
dynamic-insert="false">
.
<set
name="groups"
table="t_group_role"
lazy="false"
inverse="true"
cascade="save-update"
sort="unsorted">
<key column="role_id"/>
<many-to-many
class="
TGroup"
column="group_id"
outer-join="auto"/>
</set>
.
</class>
</hibernate>
]]>
]]>
<id name="" column="" type="">
<generator class=""> 璁劇疆涓婚敭鐢熸垚鍣?br />
</id>
Hibernate妗嗘灦鍐呭緩涓轟富閿彁渚涗簡澶氱鐢熸垚鍣紝鍏蜂綋鍖呮嫭濡備笅鍐呭錛?br />
1. increment錛氱敤浜庝負long錛宻hort錛宨nt綾誨瀷鐢熸垚鍞竴鏍囪瘑銆?br />
2. identity錛氬DB2錛孧ySQL錛孧S SQL Server錛孲ybase鍜孒ypersonicSQL鐨勫唴緗爣璇嗗瓧孌墊彁渚涙敮鎸併?br />
3. sequence錛氬湪DB2錛孭ostgreSQL錛孫racle錛孲APDB錛孧cKoi涓嬌鐢ㄥ簭鍒楋紙sequence錛夛紝鑰屽湪Interbase涓嬌鐢ㄧ敓鎴愬櫒錛坓enerator錛夈?br />
4. hilo錛氫嬌鐢ㄤ竴涓珮/浣庝綅綆楁硶楂樻晥鐢熸垚long錛宻hort鎴杋nt綾誨瀷鐨勬爣璇嗙銆傜粰瀹氫竴涓〃鍜屽瓧孌碉紙榛樿鍒嗗埆鏄痟ibernate_unique_key鍜宯ext錛変綔涓洪珮浣嶅肩殑鏉ユ簮銆傞珮/浣庝綅綆楁硶鐢熸垚鐨勬爣璇嗙鍙湪涓涓壒瀹氱殑鏁版嵁搴撲腑鏄敮涓鐨勩?br />
5. seqhilo錛氫嬌鐢ㄤ竴涓珮/浣庝綅綆楁硶楂樻晥鐢熸垚long錛宻hort鎴杋nt綾誨瀷鐨勬爣璇嗙錛岀粰瀹氫竴涓暟鎹簱搴忓垪錛坰equence錛夌殑鍚嶅瓧銆?br />
6. uuid.hex錛氱敤涓涓?28-bit鐨刄UID綆楁硶鐢熸垚瀛楃涓茬被鍨嬬殑鏍囪瘑絎︺傚湪涓涓綉緇滀腑鏄敮涓鐨勶紙浣跨敤浜咺P鍦板潃錛夈俇UID琚紪鐮佷綅涓涓?2浣?6榪涘埗鏁板瓧鐨勫瓧絎︿覆銆?br />
7. uuid.string錛氫嬌鐢ㄥ悓鏍風殑UUID綆楁硶銆俇UID琚紪鐮佷綅涓涓?6涓瓧絎﹂暱鐨勪換鎰廇SCII瀛楃緇勬垚鐨勫瓧絎︿覆銆?br />
8. native錛氭牴鎹簳灞傛暟鎹簱鐨勮兘鍔涢夋嫨identity銆乻equence銆乭ilo涓殑涓涓?br />
9. assigned錛氳搴旂敤紼嬪簭鍦ㄦ彃琛ㄤ箣鍓嶄負瀵硅薄鍒嗛厤涓涓爣璇嗙銆?br />
10. foreign錛氫嬌鐢ㄥ彟涓涓浉鍏寵仈鐨勫璞$殑鏍囪瘑絎︺傞氬父琚敤鍦ㄦ湁鍏寵仈鍏崇郴鐨勮〃涓?br />
涓鑸潵璇達紝鍦℉ibernate涓紝涓嶆帹鑽愮敤assigned浣滀負涓婚敭鐢熸垚鍣ㄣ傚洜涓哄鏁版嵁搴撹〃鏉ヨ錛屼互涓氬姟閫昏緫瀛楁浣滀負涓婚敭鏈夋綔鍦ㄧ殑鍗遍櫓鎬с傚綋璇ヤ笟鍔¢昏緫瀛楁鍦ㄥ皢鏉ラ渶瑕佹敼鍙樼殑鏃跺欙紝浣滀負涓婚敭鐨勫簲鐢ㄥ氨浼氱浉褰撻夯鐑︺傚父鐢ㄧ殑鎵嬫鏄敤涓涓拰涓氬姟鏃犲叧鐨勫瓧孌典綔涓轟富閿紝鑰屽湪PO涓畾涔夎繖涓瓧孌墊垚涓哄彉閲忓睘鎬э紝鍚屼簨鍙堜綔涓鴻瀵硅薄鐨勬儫涓鏍囪瘑銆?/span>