第十一节:Hibernate 原生Sql

Posted 星辰手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十一节:Hibernate 原生Sql相关的知识,希望对你有一定的参考价值。

Hibernate 原生 SQL

原生 SQL

如果你想使用数据库特定的功能如查询提示或 Oracle 中的 CONNECT 关键字的话,你可以使用原生 SQL 数据库来表达查询。Hibernate 3.x 允许您为所有的创建,更新,删除,和加载操作指定手写 SQL ,包括存储过程。

您的应用程序会在会话界面用 createSQLQuery() 方法创建一个原生 SQL 查询:

public SQLQuery createSQLQuery(String sqlString) throws HibernateException

当你通过一个包含 SQL 查询的 createsqlquery() 方法的字符串时,你可以将 SQL 的结果与现有的 Hibernate 实体,一个连接,或一个标量结果分别使用 addEntity(), addJoin(), 和 addScalar() 方法进行关联。

标量查询

最基本的 SQL 查询是从一个或多个列表中获取一个标量(值)列表。以下是使用原生 SQL 进行获取标量的值的语法:

String sql = "SELECT first_name, salary FROM EMPLOYEE"; SQLQuery query = session.createSQLQuery(sql); query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); List results = query.list();

装载对象

Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery( "select proj_employee.employee_no as employeeNo, ... .setResultTransformer(Transformers.aliasToBean(User.class));

通常字段名无法匹配需要添加 addScalar,核心原因,Hibernate对返回的字段不做处理,有可能时大写返回的,但是添加个Scalar就能识别,不知道这个坑爹设计谁搞的。

List resultWithAliasedBean = s.createSQLQuery( "SELECT st.name as studentName, co.description as courseDescription " + "FROM Enrolment e " + "INNER JOIN Student st on e.studentId=st.studentId " + "INNER JOIN Course co on e.courseCode=co.courseCode") .addScalar("studentName") .addScalar("courseDescription") .setResultTransformer( Transformers.aliasToBean(StudentDTO.class)) .list();

 

 

实体查询

以上的查询都是关于返回标量值的查询,只是基础性地返回结果集中的“原始”值。以下是从原生 SQL 查询中通过 addEntity() 方法获取实体对象整体的语法:

String sql = "SELECT * FROM EMPLOYEE"; SQLQuery query = session.createSQLQuery(sql); query.addEntity(Employee.class); List results = query.list();

指定 SQL 查询

以下是从原生 SQL 查询中通过 addEntity() 方法和使用指定 SQL 查询来获取实体对象整体的语法:

String sql = "SELECT * FROM EMPLOYEE WHERE id = :employee_id"; SQLQuery query = session.createSQLQuery(sql); query.addEntity(Employee.class); query.setParameter("employee_id", 10); List results = query.list();

 

以上是关于第十一节:Hibernate 原生Sql的主要内容,如果未能解决你的问题,请参考以下文章

centos mysql 优化 第十一节课

linux第十一节课(补三月三十日)

UI第十一节——UIActivityIndicatorView

第十一节:configParse模块

第十一节-文本样式

OpenGL第十一节:拉伸和过滤