关键? 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();