私が知る限り、ストアドプロシージャをmysql
と書いても、JPA
と書くことはできませんが、共通の機能(mysql)は何ですか?JPA(JAVA)経由でストアドファンクションを呼び出すことはできますか?
JPAを使用してストアドmysql関数を呼び出すにはどうすればよいですか?
多分EntityManager
の方法createNativeQuery
?
(例を作るにしてください)
私が知る限り、ストアドプロシージャをmysql
と書いても、JPA
と書くことはできませんが、共通の機能(mysql)は何ですか?JPA(JAVA)経由でストアドファンクションを呼び出すことはできますか?
JPAを使用してストアドmysql関数を呼び出すにはどうすればよいですか?
多分EntityManager
の方法createNativeQuery
?
(例を作るにしてください)
として、私の知る、JPA
あなたが ストアドプロシージャを呼び出すことができます
号でMySQLに書かれたストアドプロシージャを呼び出すことは不可能である JPAから。方法の例については、hereを参照してください。
JPAを使用してストアドmysql関数を呼び出すにはどうすればよいですか?
JPAのMySQLストアドファンクションを呼び出すことができます。 JPA 2.1では、事前定義された(CONCAT,SUBSTRINGなど)関数またはユーザー定義関数を呼び出すためのFUNCTION()関数が導入されています。
言って、たとえば、あなたがそのようなshouldGetBonus
CREATE FUNCTION shouldGetBonus (INT department_id, INT project_id)
RETURNS boolean
DETERMINISTIC
BEGIN
DECLARE is_eligible boolean;
SET is_eligible = -- eligible to get bonus
RETURN is_eligible;
END$$
として、独自のMySQL関数を定義したし、その後、例えば、あなたのJPQLクエリで
String query = "SELECT DISTINCT e FROM Employee e JOIN e.projects p WHERE FUNCTION('shouldGetBonus', e.department.id, p.id)"
TypedQuery<Employee> emps = entityManager.createQuery(query, Employee.class);
emps.getResultList();
私は同様の解決策を見つけました。私はちょうど "nativeQuery"を使用しました。しかし、私はこれを行うことができます:entityManager.find(Employee.class、FUNCTION( 'LAST_INSERT_ID()'));それはできません; – EchoCache
これはできません。[EntityManager#find](http://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#find-java)のドキュメントを読んでください。オブジェクト(識別子値を持つJavaオブジェクト)はJPQL式ではないと期待していますが、一方、 'FUNCTION( 'LAST_INSERT_ID() ') 'それはJPQLのために定義された有効な文法ではありません – Bunti
' LAST_INSERT_ID'に複雑なロジックがあり、最後に挿入されたIDを返すだけではない場合、[Entitymanager#createNativeQuery](http://docs.oracle .com/javaee/7/api/javax/persistence/EntityManager.html#createNativeQuery-java.lang.String-java.lang.Class-)またはそのオーバーロードのいずれかを使用して、ストアド関数を呼び出します。 – Bunti
はいをあなたの関数を指定します。あなたは 'JPA'を使って手続きを呼び出すことができます... –
おそらくあなたはJPA 2.1を読むべきです。インターネット上には多くの文書があり、StoredProcedureを呼び出す方法は –
です。>> http://www.thoughts-on-java.org/call-stored-procedures-jpa/ –