2016-08-04 6 views
3

Spring起動アプリケーションでSpring-dat-jpaを使用していて、リポジトリ内でネイティブクエリを実行しようとしています。スキーマ名にテーブル名を追加するとうまく動作しますが、独立して動作せず、定義したEntityクラスの場合と同様にapplication.propertiesファイルからスキーマ名を選択しません。Springデータjpaリポジトリ内のネイティブクエリのデフォルトスキーマ

私は、スキーマエンティティクラスと名前付きクエリでうまく動作します。私は@queryで任意のネイティブクエリを記述する場合しかし、それはスキーマ名文句を開始:

以下
spring.jpa.properties.hibernate.default_schema=NPS_WO 

は私のクエリです:私の実際のシナリオでは

@Repository 
public interface TestRepository extends JpaRepository<TypeRef,Long> { 


    @Query(value="SELECT t.* from Type_Ref t") 
    public List<Object[]> findAllTypes(); 

} 

このクエリは、複雑なネイティブクエリによって置き換えられます。

本当にありがとうございます。

+0

「SELECT t。* from Type_Ref t」が実際に有効なクエリであることを確認してください。代わりに 'SELECT * from Type_Ref t'でなければならないと思います。 –

+0

私はクエリを修正しましたが、依然としてスキーマ名 –

+0

を求めています。このクエリは必要ありません。 JpaRepositoryは(CrudRepositoryから)このクエリで期待どおりに動作するfindAllメソッドを継承しています。 - > TestRepository.findAll()。 http://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html#findAll-- – Pau

答えて

3

{h-schema}を使用すると、ネイティブクエリ内の既定のスキーマ名にアクセスできます。

だからあなたのクエリは、次のようになります。H-スキーマ名とテーブル名のドットがありません

@Query(value="SELECT t.* from {h-schema}Type_Ref t") 
public List<Object[]> findAllTypes(); 

、これが自動的に追加されます。

関連する問題