2017-08-23 3 views
1

Spring Boot Data JPAでアプリケーションを構成して、ストアドプロシージャを呼び出したいとします。しかし、Webを検索した後、私はこのアプローチが何らかの「エンティティテーブル」を利用しなければならないことを知ります。例えば、herehereを説明するようにSpring Data JPAのエンティティにストアドプロシージャメタデータ定義があるのはなぜですか?

これを見ることができます。

しかし、なぜストアドプロシージャのメタデータ定義をエンティティに結びつける必要があるのか​​混乱していますか?そのようなエンティティテーブルがないとどうなりますか?別の方法はありませんか?

答えて

0

にこのようなものを使用することにより、直接ストアドプロシージャを呼び出すことができますストアドプロシージャの呼び出しにSpring Data JPAを使用するつもりはありません。代わりにSpring JDBCTemplateを選択します。あなたのDAOクラスで

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jdbc</artifactId> 
     <version>1.5.6.RELEASE</version> 
    </dependency> 

2)、以下を注入:ここでは

1は、これを行うことができる方法です。次の依存関係を(私は春のブートを使用していますことに注意してください)を追加pom.xmlで)

1:あなたのDAOクラスで

@Autowired 
private JdbcTemplate jdbcTemplate; 

3)、あなたは以下の通りであるものと同様のものを使用することができます

LOGGER.info("Calling stored proc..."); 
    SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withSchemaName("test").withProcedureName("test_proc"); 
    SqlParameterSource in = new MapSqlParameterSource().addValue("name", "akshay"); 
    Map<String, Object> out = simpleJdbcCall.execute(in); 
    LOGGER.info("Output from procedure: {}", out.get("fullname")); 
    LOGGER.info("Returned from stored proc."); 

詳しい情報はここで入手できます。https://docs.spring.io/spring/docs/3.0.0.M4/reference/html/ch12s05.html

乾杯

0

リンクしたページには、の説明があります。 String Data JPAからストアドプロシージャを呼び出すことができます。

これはかなり奇妙に見えますが、わかります。彼らは、単にストアドプロシージャ呼び出しをその上にピギーバックするためにエンティティを定義する必要があると言います。

なぜJDBCコールの代わりにSpringデータを使用するのですか?私は推測できます:

  • JDBCリソースのオープン/クローズ/キャッシングを扱いたくありません。
  • アプリは厳格なルールがあります。すべてのDBアクセスは春データ
0

を経なければならないあなたは、最後にいくつかの研究の後、あなたのリポジトリのインターフェース

@Procedure(procedureName = "test_pkg.in_and_out_test") 
String callStoredProc(Long id, String p_method); 
+0

おかげで私はリポジトリがあると信じて、「表」の特定もう一度、そうではありませんか?例:パブリックインターフェイスMyDataRepoは、JpaRepository を継承します。 10テーブルと10レポと言うなら、どこに言いましたか?それは誤解ではないですか? –

関連する問題