Hibernate 原生查询 createSQLQuery 详解
来源:互联网 发布:js中format 日期函数 编辑:程序博客网 时间:2024/04/30 15:25
如何使用Hibernate原生查询?
首先,先让大家看看我的表结构,如图所示
其中orgid为机构ID 自动增加,cid为外键 标识学校ID,orgname为机构名字......
学校和机构是一对多的关系....
在HIBERNATE中要查询CID=1学校的下属机构有哪些怎么办呢
可以 C c = session.load(C.class,cid)...
Set <Org> orgs = c.getOrgs();
若查询中要求按ID排列呢,上述方法肯定不行了,那我们有必要看看Hibernate提供的原生查询了
1. 标量查询
查询方法1
- public void testSQL1()
- {
- Session session = HibernateSessionFactory.getSession();
- Transaction trans = null;
- List<Org> l = null;
- trans = session.beginTransaction();
- Query query = session.createSQLQuery(
- "select * from org");
- List<Object[]> object = query.list();
- for(Object[] o:object)
- {
- int len = o.length;
- for(int i=0;i<len;i++)
- {
- System.out.println(o[i]);
- }
- }
- trans.commit();
- session.close();
- }
上述方法
返回一个Object数组(Object[])组成的List,数组每个元素都是org表的一个字段值。Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。
该程序将输出
Hibernate: select * from org
1
1
教务处
0983-32432
四川绵阳
2
1
计算机学院
0983-32423
四川绵阳
3
1
物理学院
0932-32432
四川绵阳
此输出按列号输出
如果要避免过多的使用ResultSetMetadata
,或者只是为了更加明确的指名返回值,可以使用addScalar()
。
列子:
- public void testSQL1()
- {
- Session session = HibernateSessionFactory.getSession();
- Transaction trans = null;
- List<Org> l = null;
- trans = session.beginTransaction();
- Query query = session.createSQLQuery(
- "select * from org");
- List<Object[]> object = query.list();
- for(Object[] o:object)
- {
- int len = o.length;
- for(int i=0;i<len;i++)
- {
- System.out.println(o[i]);
- }
- }
- trans.commit();
- session.close();
- }
输出
Hibernate: select * from org
1
教务处
2
计算机学院
3
物理学院
它仍然会返回Object数组,但是此时不再使用ResultSetMetdata
,而是明确的将orgID,orgNAME,,按照Integer,String从resultset中取出。同时,也指明了就算query是使用*
来查询的,可能获得超过列出的这两个字段,也仅仅会返回这两个字段。
对全部或者部分的标量值不设置类型信息也是可以的。
sess.createSQLQuery("SELECT * FROM org") .addScalar("ID", Hibernate.Integer) .addScalar("NAME")
2.实体查询(Entity queries)
具体实现
- public void testSQL()
- {
- Session session = HibernateSessionFactory.getSession();
- Transaction trans = null;
- List<Org> l = null;
- trans = session.beginTransaction();
- Query query = session.createSQLQuery(
- "select * from org as o where o.cid=?").addEntity(Org.class)
- .setInteger(0, 1);
- l = query.list();
- for(Org o:l)
- {
- System.out.println(o.getOrgname());
- }
- trans.commit();
- session.close();
- }
上述程序输出结果为:
Hibernate: select * from org as o where o.cid=?
教务处
计算机学院
物理学院
转载请注明出处
Author:Zhang Qi
Email:fish2-2@163.com
- Hibernate 原生查询 createSQLQuery 详解
- Hibernate的createSQLQuery查询
- hibernate 运行原生sql 语句 createSQLQuery
- Hibernate原生SQL(createSQLQuery,通过Transformers.ALIAS_TO_ENTITY_MAP设置生成MAP)查询,自动读取ORACLE CLOB内容的解决方案
- hibernate的createSQLQuery多表查询
- Hibernate的createSQLQuery查询的问题
- Hibernate的createSQLQuery查询的问题
- Hibernate的createSQLQuery查询的小技巧
- Hibernate的createSQLQuery查询的小例子
- Hibernate的createSQLQuery查询的小例子
- Hibernate的createSQLQuery查询的小例子
- Hibernate 使用createSQLQuery查询时,缓存问题
- Hibernate原生SQL查询
- hibernate 原生sql查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- Hibernate原生SQL查询
- SQL查询 FOR XML [RAW|AUTO|EXPLICIT]
- 低调做人,你会......
- 主动出击 夺回被人盗走的QQ号码
- 今天的心情真的是坏到极点
- 爱她 爱计算机 爱无拘无束
- Hibernate 原生查询 createSQLQuery 详解
- UI生成统一JSR?(转载自Metawidget创始人博客)
- 如何采用敏捷方法?
- Java SE 6 — 更好的 JPA、更好的 JAXB 和更好的批注处理
- Java程序员ActionScript 3入门
- 使用 JFreeChart 显示您的 Oracle 数据库数据
- 日语语法
- 上网不再怕中毒 教你一招克死所有病毒
- &ldquo;不务正业&rdquo;的一个月