hql的几种写法
2015-04-11 15:15
204 查看
Java代码
String sql = "select * from T_TMP_PUBLIC_POLICY TP"; SQLQuery sqluery = session.createSQLQuery(sql).addEntity(TPublicPolicyTemporary.class); List tmpList = sqluery.list();
注册到非 Hibernate pojo 中:
Java代码
sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS") .setResultTransformer(Transformers.aliasToBean(CatDTO.class))
返回多个实体
Java代码
sess.createSQLQuery("SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID")
.addEntity("cat", Cat.class)
.addEntity("mother", Cat.class)
{cat.*}, 的cat 就是 addEntity(“ 里面的 cat 名称。
select new xxx(a1,a2,a3) from bbbb
参考:/article/4194075.html
other:
Finder finder = Finder
.create("select a,b from SysRole a,SysDepart b where a.departGuid=b.departGuid");
Pagination pagination = find(finder, pageNo, pageSize);
List<?> tempList=pagination.getList();
List<SysRole> lsReslut=new ArrayList();
for (Object object : tempList) {
SysRole tempRole=(SysRole)((Object[])object)[0];
SysDepart tempDepart=(SysDepart)((Object[])object)[1];
tempRole.setSysDepart(tempDepart);
}
对于支持子查询的数据库,Hibernate支持在查询中使用子查询。一个子查询必须被圆括号包围起来(经常是SQL聚集函数的圆括号)。 甚至相互关联的子查询(引用到外部查询中的别名的子查询)也是允许的。
注意,HQL自查询只可以在select或者where子句中出现。
在select列表中包含一个表达式以上的子查询,你可以使用一个元组构造符(tuple constructors):
注意在某些数据库中(不包括Oracle与HSQL),你也可以在其他语境中使用元组构造符, 比如查询用户类型的组件与组合:
该查询等价于更复杂的:
有两个很好的理由使你不应当作这样的事情:首先,它不完全适用于各个数据库平台;其次,查询现在依赖于映射文件中属性的顺序。
Java代码
String sql = "select * from T_TMP_PUBLIC_POLICY TP"; SQLQuery sqluery = session.createSQLQuery(sql).addEntity(TPublicPolicyTemporary.class); List tmpList = sqluery.list();
String sql = "select * from T_TMP_PUBLIC_POLICY TP"; SQLQuery sqluery = session.createSQLQuery(sql).addEntity(TPublicPolicyTemporary.class); List tmpList = sqluery.list();
注册到非 Hibernate pojo 中:
Java代码
sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS") .setResultTransformer(Transformers.aliasToBean(CatDTO.class))
sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS") .setResultTransformer(Transformers.aliasToBean(CatDTO.class))
返回多个实体
Java代码
sess.createSQLQuery("SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID")
.addEntity("cat", Cat.class)
.addEntity("mother", Cat.class)
{cat.*}, 的cat 就是 addEntity(“ 里面的 cat 名称。
select new xxx(a1,a2,a3) from bbbb
参考:/article/4194075.html
other:
Finder finder = Finder
.create("select a,b from SysRole a,SysDepart b where a.departGuid=b.departGuid");
Pagination pagination = find(finder, pageNo, pageSize);
List<?> tempList=pagination.getList();
List<SysRole> lsReslut=new ArrayList();
for (Object object : tempList) {
SysRole tempRole=(SysRole)((Object[])object)[0];
SysDepart tempDepart=(SysDepart)((Object[])object)[1];
tempRole.setSysDepart(tempDepart);
}
对于支持子查询的数据库,Hibernate支持在查询中使用子查询。一个子查询必须被圆括号包围起来(经常是SQL聚集函数的圆括号)。 甚至相互关联的子查询(引用到外部查询中的别名的子查询)也是允许的。
from Cat as fatcat where fatcat.weight > ( select avg(cat.weight) from DomesticCat cat )
from DomesticCat as cat where cat.name = some ( select name.nickName from Name as name )
from Cat as cat where not exists ( from Cat as mate where mate.mate = cat )
from DomesticCat as cat where cat.name not in ( select name.nickName from Name as name )
select cat.id, (select max(kit.weight) from cat.kitten kit) from Cat as cat
注意,HQL自查询只可以在select或者where子句中出现。
在select列表中包含一个表达式以上的子查询,你可以使用一个元组构造符(tuple constructors):
from Cat as cat where not ( cat.name, cat.color ) in ( select cat.name, cat.color from DomesticCat cat )
注意在某些数据库中(不包括Oracle与HSQL),你也可以在其他语境中使用元组构造符, 比如查询用户类型的组件与组合:
from Person where name = ('Gavin', 'A', 'King')
该查询等价于更复杂的:
from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')
有两个很好的理由使你不应当作这样的事情:首先,它不完全适用于各个数据库平台;其次,查询现在依赖于映射文件中属性的顺序。
相关文章推荐
- hibernate几种HQL的写法
- hql的几种写法
- 归纳下js面向对象的几种常见写法
- 点击事件的几种写法
- 在Linux下编译内核模块的Makefile的几种写法 转
- 【设计模式】C++单例模式的几种写法——Java自动加载内部类对象,C++怎么破?
- 登录的几种写法
- C/S 超时控制的几种写法
- js函数的几种写法 闭包概要
- 简单Ajax几种写法
- 单例模式的几种写法
- java中单例模式的几种写法
- 水平垂直居中的几种写法
- 《Qt信号槽的几种写法》
- Android中Button事件的几种写法
- 设计模式--单例模式几种写法及比较
- Ajax调用后台方法的几种写法(一)
- 设计模式之单例模式的几种写法
- JS 中面向对象的几种写法
- TestNG DataProvider的几种方法写法