µ±Ç°Î»Ö㺠´úÂëÃÔ >> SQL >> hibernate çš„createSQLQuery的几ç§�用æ³?è½
  Ïêϸ½â¾ö·½°¸

hibernate çš„createSQLQuery的几ç§�用æ³?è½

Èȶȣº189   ·¢²¼Ê±¼ä£º2016-05-05 11:22:45.0
hibernate 的createSQLQuery的几�用��
关键� hibernate
使用SQLQuery
对原生SQL查è?执è?的控制是通过SQLQuery接å�£è¿›è?的,通过执è?Session.createSQLQuery()获å�–这个接å�£ã€‚最ç®?å�•的情况下,我们å�?»¥é‡‡ç”¨ä»¥ä¸‹å½¢å¼�ï¼?
List cats = sess.createSQLQuery( " select * from cats " ).addEntity(Cat. class ).list();
这个查è?指定äº?
SQL查è?å­—ç?ä¸?
查è?返回的实ä½?
这里,结果集字æ?å��è?å�‡è?为与映射文件ä¸?Œ‡æ˜Žçš„å­—æ?å��相å�Œã?‚å?于连接了多个表的查è?,这就å�¯èƒ½é? æˆ�é—??,因为å�¯èƒ½åœ¨å¤šä¸ªè¡¨ä¸­å‡ºçްå�Œæ ·å��字的字段ã?‚下é�¢çš„æ–¹æ³•å°±å�¯ä»¥é�¿å…�字段å��é‡�å?的问é¢?
List cats = sess.createSQLQuery( " select {cat.*} from cats cat " ).addEntity( " cat " , Cat. class ).list();
这个查è?指定äº?
SQL查è?è¯?�¥ï¼Œå®ƒå¸¦ä¸€ä¸?� ä½�ç?,å�¯ä»¥è?Hibernate使用字æ?的别å�?
查è?返回的实体,和它的SQL表的åˆ?��.
addEntity()方法将SQL表的åˆ?��和实体类è�”系起æ�¥ï¼Œå¹¶ä¸”确定查询结果集的形æ€�ã??
addJoin()方法å�?»¥è¢?”¨äºŽè½½å…¥å…¶ä»–的实体和集å�ˆçš„å…³è�”.
List cats = sess.createSQLQuery(
" select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id " )
.addEntity( " cat " , Cat. class )
.addJoin( " kitten " , " cat.kittens " )
.list();
原生的SQL查è?å�?ƒ½è¿”回ä¸?ä¸?®€å�•的标é‡�值或者一ä¸? ‡é‡�和实体的结å�ˆä½“ã€?
Double max = (Double) sess.createSQLQuery( " select max(cat.weight) as maxWeight from cats cat " ).addScalar( " maxWeight " , Hibernate.DOUBLE);.uniqueResult();
除æ?之å?,你还å�¯ä»¥åœ¨ä½ çš„hbm文件ä¸?��述结果集映射信æ�¯ï¼Œåœ¨æŸ¥è?ä¸?½¿ç”¨ã??
List cats = sess.createSQLQuery(" select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id " ).setResultSetMapping( " catAndKitten " ).list();

命å��SQL查è?
å�?»¥åœ¨æ˜ å°„文档中定义查è?çš„å��å­?ç„¶å�Žå°±å�¯ä»¥è±¡è°ƒç”¨ä¸?ä¸?‘½å��çš„HQL查è?ä¸?样直接调用命å��SQL查è?.在这ç§�情况下,我们ä¸?éœ?è¦�调用addEntity()方法.
< sql - query name = " persons " >
< return alias = " person " class = " eg.Person " />
Select person.NAME AS {person.name},person.AGE AS {person.age},person.SEX AS {person.sex} FROM PERSON person Where person.NAME LIKE :namePattern
</ sql - query >List people = sess.getNamedQuery( " persons " ).setString( " namePattern " , namePattern)
.setMaxResults( 50 )
.list();
  Ïà¹Ø½â¾ö·½°¸