2017-12-19 18 views
0

私は複数のModelクラスを持つSpringブートプロジェクトを持っていますSpringブートでHQLクエリを使用する

DAO実装で複数のモデルクラスを使用したいと思います。

誰かがここでHQLクエリを使用する方法を説明してください。

私が見たほとんどの例は、CRUDRepositoryを使用しています。しかし、私の理解では、これは1つのモデルクラス(私の理解が間違っていれば私を修正してください)に私たちを制限します。

2番目にCRUDRepositoryを使用すると、非常に具体的な方法に制限されます。しかし、私は必要なHQLクエリーのような、より複雑になることができます:

Query query = session.createQuery(from Employee where name=:name and place=:place and phone=:phone and gender=:gender); 

はそれをしても、このようなHQLクエリにCRUDRepositoryを使用するための標準的な練習をしています。 このようなHQLクエリを使用するにはどうすればよいですか。 (可能であれば、追加する必要があるすべての依存関係や注釈を追加してください)。私はHibernateとpostgresを使用しています。

+0

ここにドキュメントがあります。すべての質問に対する回答などが掲載されています。https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods –

答えて

0

CRUDリポジトリは、DAOを書き込むための標準的な方法です。ドキュメントを見ると、エンティティのフィールドを使用する複雑なクエリを使用できることがわかります(これは非常に複雑ですが、クエリメソッドのpart-4.3でhereを参照することをお勧めします)。より複雑な方法、あなたは法の上に注釈@Queryを使用することができます。今、あなたは、クエリ内の照会に挿入してアクセスしますString aでき

@Repository 
interface MyRepo implements JpaRepository<MyEntity,Long> { 
    @Query("your custom query here") 
    MyEntity findByFeature(String a) 
} 

(のようなSelect u where u.name="blabla"blablaがあなたの入力文字列です)

@Queryリポジトリと同じ依存関係がある(私はspring-boot-starter-data-jpaで十分だと思う)

0

JpaRepositoryは使い確かに素晴らしいですが、私はそれをやった方法(原因など組織の勧告に)複雑なHQLクエリを使用するために持っている人のために、ここにある:

  1. 次注入することによって、セッションファクトリを取得します。ご使用の構成で、Bean:

    @Bean 公共のSessionFactoryのSessionFactory(@Qualifier( "のEntityManagerFactory")のEntityManagerFactory EMF) { リターンemf.unwrap(SessionFactory.class)。 }

  2. コンフィギュレーションクラス

    @EntityScanにEntityScanとComponentScanを追加(basePackages = { "com.app.persistence"}) @ComponentScan(basePackages = { "com.app"})

  3. 先に行くと、任意のHQLクエリを使用します。

    @Autowired SessionFactoryの工場を。

    @Override 
    public String check() { 
        Session session = null; 
        try { 
         session = factory.openSession(); 
         Query query = session.createQuery("from Test"); 
         List<Test> res = query.list(); 
         Test sing = res.get(0); 
         return sing.getName(); 
    
        } catch (Exception e) { 
         System.out.println("Exception in Dao"); 
         e.printStackTrace(); 
         throw e; 
        } finally { 
         if (session != null) { 
          session.close(); 
         } 
        } 
    } 
    

注:私は、データソースと、すべての設定のような他のものは、すでに気をとられていると仮定しています。

私の理解や方法が間違っていれば誰でも私を修正することができます。

しかし、それは私のためにこのようにうまくいった!! :)