在Hibernate 资源文件中定义复杂的自定义sql,可灵活用于自定义的复杂增删改查
此方法不限于以前的hibernate是注解方式还是xml声明实体类。
一 定义包含自定义sql的资源文件:directSql.hbm.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <sql-query name="mergeTargetScore"> <![CDATA[ update t_duty_target_dtl set target_Scorelevel_Id =:newId where duty_Target_Dtl_Id = :id ]]> </sql-query> </hibernate-mapping>
二 在hibernate.cfg.ml中包含此文件
<hibernate-configuration> <session-factory> <property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <property name="connection.url"> jdbc:oracle:thin:@192.168.1.55:1521:orcl </property> 。。。 <property name="myeclipse.connection.profile"> ora4sljx </property> <mapping resource="com/jadetrust/sljx/db/directSql.hbm.xml" /> <mapping class="com.jadetrust.sljx.db.domain.TWorkLogTarget" /> <mapping class="com.jadetrust.sljx.db.domain.TReconDtl" />
三 在java中调用自定义sql
Java代码
public static void update1(Long whereID, Long destID) { HibernateSessionFactory.getSession().getTransaction().begin(); Session s = HibernateSessionFactory.getSession(); Query q = s.getNamedQuery("mergeTargetScore"); q.setParameter("id", whereID); q.setParameter("newId", destID); q.executeUpdate(); //List<ZUser> l = q.setMaxResults(50).list();//查询语句 HibernateSessionFactory.getSession().getTransaction().commit(); }
-----------------------------------------------------
转载请注明来源此处
原地址:#
发表