2017-12-19 18 views
0

여러 모델 클래스를 가진 스프링 부트 프로젝트가 있습니다.스프링 부트에서 HQL 쿼리 사용하기

DAO 구현에서 여러 모델 클래스를 사용하고 싶습니다.

누군가 여기서 HQL 쿼리를 어떻게 사용할 수 있는지 설명해주십시오.

내가 본 예 중 대부분은 CRUDRepository를 사용합니다. 그러나 이것이 나의 이해에서 우리를 하나의 모델 클래스로 제한한다. (내 이해가 잘못되면 나를 교정해라.)

두 번째로 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를 작성하는 표준 방법입니다. 문서를 살펴보면 엔티티 필드를 사용하는 복잡한 쿼리를 사용할 수 있다는 것을 알 수 있습니다 (상당히 복잡 할 수 있습니다. 쿼리 메서드 파트 4.3에서 here을 사용하는 것이 좋습니다). 그리고 원하는 경우 (blabla 당신의 입력 문자열입니다 Select u where u.name="blabla"을 같은)

@Query 쿼리 내부

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

당신이 쿼리 삽입 할 수 있습니다 및 액세스 당신에게 String a : 더 복잡한 방법, 당신은 방법을 통해 주석 @Query을 사용할 수 있습니다 저장소와 같은 의존성이있다. (나는 spring-boot-starter-data-jpa으로 충분하다고 생각한다.)

0

JpaRepository 사용이 확실히 굉장합니다,하지만 난 그것을 어떻게 (때문에 등 조직의 권고에) 복잡한 HQL 쿼리를 사용하는 사람, 여기에 있습니다 :

  1. 다음 주입하여 세션 공장 받기 구성 콩 :

    @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(); 
         } 
        } 
    } 
    

참고 : 나는 가정하고 그 데이터 소스를 구성하고 모든 이미 설정을했습니다 같은 다른 것들.

내 이해 또는 방법이 잘못되면 누구나 나를 고칠 수 있습니다.

하지만이 방법으로는 나에게 잘 맞았습니다 !! :)