call PL/SQL procedure in hibernate

/*GetStocks(stockcode VARCHAR2(20)) is procedure name created by PL/SQL*/
 
//1.Native SQL – createSQLQuery
//You can use createSQLQuery() to call a store procedure directly.
 
Query query = session.createSQLQuery(
	"CALL GetStocks(:stockCode)")
	.addEntity(Stock.class)
	.setParameter("stockCode", "7277");
 
List result = query.list();
for(int i=0; i<result.size(); i++){
	Stock stock = (Stock)result.get(i);
	System.out.println(stock.getStockCode());
}
 
 
//2. sql-query in XML mapping file
//Declare your store procedure inside the “sql-query” tag.
 
//<!-- Stock.hbm.xml -->
...
<hibernate-mapping>
    <class name="com.mkyong.common.Stock" table="stock" ...>
        <id name="stockId" type="java.lang.Integer">
            <column name="STOCK_ID" />
            <generator class="identity" />
        </id>
        <property name="stockCode" type="string">
            <column name="STOCK_CODE" length="10" not-null="true" unique="true" />
        </property>
        ...
    </class>
 
    <sql-query name="callStockStoreProcedure">
	<return alias="stock" class="com.mkyong.common.Stock"/>
	<![CDATA[CALL GetStocks(:stockCode)]]> //Here call procedure
    </sql-query>
 
</hibernate-mapping>
//Call it with getNamedQuery().
Query query = session.getNamedQuery("callStockStoreProcedure")
	.setParameter("stockCode", "7277");
List result = query.list();
for(int i=0; i<result.size(); i++){
	Stock stock = (Stock)result.get(i);
	System.out.println(stock.getStockCode());
}

你可能感兴趣的:(Hibernate)