SQLQuery query = session.createSQLQuery(sql);
映射到实体的话使用: query.setResultTransformer(Transformers.aliasToBean(YourEntity.class));
YourEntity.class是你要映射的Bean
在使用Session来执行save()、update()、delete()操作的时候会通过映射标记来重载Hibernate默认的语句,因此我们可以使用这些标记来让Hibernate加载我们自定义的SQL语句
1).实体类映射文件配置
<hibernate-mapping>
<class name="com.bc.demo03.pojo.Emp" table="emp" catalog="hibernate_data" lazy="true">
<id name="empno" type="java.lang.Integer">
<column name="EMPNO" />
<generator class="identity"></generator>
</id>
<property name="ename" type="java.lang.String">
<column name="ENAME" length="10" />
</property>
<!--因为自定义update语句不涉及此字段,必须设置update="false"-->
<property name="job" type="java.lang.String" update="false">
<column name="JOB" length="9" />
</property>
<!--因为自定义insert语句不涉及此字段,必须设置insert="false"-->
<property name="mgr" type="java.lang.Integer" insert="false">
<column name="MGR" />
</property>
<!--其余属性配置同理略-->
<!--自定义SQL语句-->
<sql-insert>
<!--insert和update没有涉及的字段要在字段配置上添加insert="false"-->
insert into Emp (ename,job) values(?,?)
</sql-insert>
<sql-update>
<!--insert和update没有涉及的字段要在字段配置上添加update="false"-->
update Emp set ename = ?,mgr = ? where empno = ?
</sql-update>
<sql-delete>
<!--没有涉及的字段要在字段配置上添加delete="false"-->
delete from Emp where empno = ?
</sql-delete>
</class>
</hibernate-mapping>
程序代码
<!--正常调用save() update() delete()就会调用自定义SQL,这里就不写了-->
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。