2017-12-08 10 views
0

최대 절전 모드와 같은 orm 매퍼로 쿼리하는 방법에 대한 질문이 있습니다. 내가 최대 절전 모드 엔진이 쿼리를 계단식으로 한 번에 모든 클래스 인스턴스를 추가 할 수있는 개체를 저장하려면이jpa 데이터 모델에서 특정 개체 쿼리

class A { 
    int i; 
    B b; 
} 

class B { 
    int j; 
} 

같은 데이터베이스 모델을 가정 해 봅시다. 이것은 클래스 A의 값을 기준으로 데이터베이스에서 객체를 가져 오는 경우에도 작동합니다.

그러나 클래스 A의 모든 항목에 값이 j = 10 인 B 객체를 보유하고 싶다면 어떻게해야합니까?

SELECT * FROM A a, B b WHERE a.ref = b.ref AND b.j = 10; 

하지만, ORM과

심판이 객체 참조로 모델링 :

는 SQL에서 나는 이런 식으로 뭔가를 할 것이다. 이런 쿼리를 어떻게 작성해야합니까? 우선 : 쿼리를 작성해야합니까? 둘째 : 어떻게 당신은 사용할 수 있어야 이러한 참조 a.ref = b.ref

+0

어떤 JPQL 참조 왜 가정 할 당신에게 – DN1

답변

0

당신은 JPQL의 참조를 통해 탐색 할 수 있습니다 :

SELECT a FROM A a WHERE a.b.j = 10; 
0

를 해결 최대 절전 모드 것 :

A findByBJ(int j); 

당신의 테이블이 제대로 일부 OneToOne 관계에 저장되어있는 경우.

+1

을 말할 것 그는 스프링 데이터를 사용하고 있습니까? –

0

정의하는 하나의 EntityManager : 다음

EntityManager em; 

:

CriteriaBuilder builder = em.getCriteriaBuilder(); 
    CriteriaQuery<A> query = builder.createQuery(A.class); 
    Root<A> from = query.from(A.class); 
    from.fetch("b"); 
    Predicate predicate = builder.and(predicate, builder.equal(from.get("b").get("j"), 10); 
    TypedQuery<A> typedQuery = em.createQuery(query.select(from).where(predicate)); 
    List<A> results = typedQuery.getResultList();