我正在開發一個使用JPA 2.0和MySQL 5數據庫的應用程序。JPA JPQl或MySQL中的存儲過程
我知道JPA隱藏到數據庫查詢電話,並使其underthehood,以及所有我用的是JPQL,
現在沒有這使得存儲過程不太需要?以及如何在JPA 2.0中使用存儲過程?
我正在開發一個使用JPA 2.0和MySQL 5數據庫的應用程序。JPA JPQl或MySQL中的存儲過程
我知道JPA隱藏到數據庫查詢電話,並使其underthehood,以及所有我用的是JPQL,
現在沒有這使得存儲過程不太需要?以及如何在JPA 2.0中使用存儲過程?
存儲過程大多已經失寵(您可以閱讀一些關於爲什麼在這裏的想法:http://www.codinghorror.com/blog/2004/10/who-needs-stored-procedures-anyways.html)。
一般情況下,除非您有性能問題或正在使用舊版系統,否則建議不要使用存儲過程。 對象關係映射解決方案(例如JPA)現在是行業標準,主要是因爲它們可以讓您編寫更少,並且比其他方法(例如直接使用DAO模式和JDBC)更容易維護。
例如考慮增加一個新列到你正在使用的CRUD(創建,檢索,更新,刪除)與表:
在關於使用存儲過程,JPA不具有本身的存儲過程的支持,但有兩個辦法可以解決它:
您可以使用「本地查詢」功能,它可以讓你寫在本地數據庫查詢語言的SQL,例如用於MySQL中,你可以寫這樣的事情:
Query query = entityManager.createNativeQuery("{ CALL procedure(?) }");
query.setParameter(1, parameterName);
您還需要記住該過程必須返回結果集,並且不能使用輸出參數。
這個答案是非常堅持己見,引用了傑夫阿特伍德的鏈接博客文章,這在2013年並非如此。使用SP的其他很多理由,除了性能。 – 2013-11-20 10:50:13
使用ORM被認爲是最佳實踐(尤其是在Java和企業中),儘管最佳實踐是趨勢和變化,但我還沒有聽說過SP的復甦。 你能提供一個鏈接或一些信息,說明SPs優於ORM或DAO的優勢嗎? 此外,爲什麼博客帖子在2013年不再相關?我沒有及時瞭解SP的進展,該領域是否有任何改變? – 2013-11-27 19:23:51
從未有過支持或反對使用SP的明確和終端贊成或反對的決定。我只是碰巧在大型企業(Java和非Java)系統上工作,其中SP是必不可少的。我特別關注SQL中的進步,以及PL/SQL和T-SQL等語言,這些語言向我表明,這些供應商有很大的市場來繼續在這方面進行開發工作。此外,傑夫阿特伍德自己也寫了這個,2年後:http://www.codinghorror.com/blog/2006/06/object-relational-mapping-is-the-vietnam-of-computer-science.html – 2013-11-27 19:29:36
如果您使用EclipseLink
JPA,則可以使用@NamedStoredProcedureQuery
批註存儲您的存儲過程。
實施例:
@NamedStoredProcedureQuery(
name="findAllEmployees",
procedureName="EMP_READ_ALL",
resultClass=Employee.class,
parameters = {
@StoredProcedureParameter(
queryParameter="result",
name="RESULT_CURSOR",
direction=Direction.OUT_CURSOR
)
}
)
@Entity
public class Employee {
...
}
您可以參考here。
[調用從Java/JPA存儲過程]的可能重複(http://stackoverflow.com/questions/3572626/calling-stored-procedure-from-java-jpa) – Perception 2012-03-22 16:35:40