开发者社区> 问答> 正文

hibernate 里面怎么用自定义的 sql 来查询?

rt,通过自定义 sql 来查询,而且映射到实体

展开
收起
日拱一卒999 2019-03-15 19:24:19 5541 0
3 条回答
写回答
取消 提交回答
  • SQLQuery query = session.createSQLQuery(sql);

    映射到实体的话使用: query.setResultTransformer(Transformers.aliasToBean(YourEntity.class));

    YourEntity.class是你要映射的Bean

    2019-07-17 23:30:58
    赞同 展开评论 打赏
  • 在使用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,这里就不写了-->
    2019-07-17 23:30:58
    赞同 展开评论 打赏
  • SQLQuery sqlQuery = session.createSQLQuery(sql); 即可

    2019-07-17 23:30:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载