EJB調用存儲過程
EJB調用存儲過程要調用存儲過程,我們可以通過EntityManager 對象的createNativeQuery()方法執行SQL 語句(注意:這里說的是SQL 語句,不是EJB3 QL), 調用存儲過程的SQL 格式如下:
{call 存儲過程名稱(參數1, 參數2, … )}
在EJB3 中你可以調用的存儲過程有兩種
1.無返回值的存儲過程。
2.返回值為ResultSet(以select 形式返回的值)的存儲過程,EJB3 不能調用以OUT 參數返回值的存儲過程
1.調用無返回值的存儲過程
//調用無返回參數的存儲過程
Query query = em.createNativeQuery("{call Procedure()}");
query.executeUpdate();
2.調用返回單值的存儲過程
//調用返回單個值的存儲過程
Query query = em.createNativeQuery("{call GetPersonName(?)}");
query.setParameter(1, new Integer(1));
String result = query.getSingleResult().toString();
3.調用返回表全部列的存儲過程
在調用存儲過程時,可以讓EJB3 Persistence 運行環境將列值直接填充入一個Entity 的實例(本例填充進Person 對象),并將實例作為結果返回
//調用返回Person 全部列的存儲過程
Query query = em.createNativeQuery("{call GetPersonList()}", Person.class);
List result = query.getResultList();
存儲過程GetPersonList:
CREATE PROCEDURE `GetPersonList`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select * from person;
END;
4.調用返回部分列的存儲過程
創建存儲過程:
CREATE PROCEDURE `GetPersonPartProperties`()
NOT DETERMINISTICSQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT personid, personname from person;
END;
//調用返回部分列的存儲過程
Query query = em.createNativeQuery("{call GetPersonPartProperties()}");
List result = query.getResultList();