2013-11-04 2 views
0

현재 JPA Criteria API를 사용하여 쿼리를 작성하는 데 어려움을 겪고 있습니다. 동적으로 쿼리를 작성하고 싶습니다. 메타 모델 및 입력 된 쿼리를 사용하는 것은 나를위한 옵션이 아닙니다. 바로 다음 쿼리에도 불구하고,기준 API 조인 untyped : 관련 엔터티 (일대일)의 값 쿼리

CriteriaBuilder builder = em.getCriteriaBuilder(); 
    CriteriaQuery<Object[]> query = builder.createQuery(Object[].class); 
    Root<MyEntity> root = query.from(MyEntity.class); 
    root.join("myRelatedEntities"); 
    query.select(builder.array(root.get("myRelatedEntities").get("name"))); 
    Query queryCriteria = em.createQuery(query); 
    List<Object[]> resultRows = queryCriteria.getResultList(); 

resultRows 빈 목록입니다 : 나는 "MyEntity"에 가입하여 "MyRelatedEntity"의 필드를 조회하려고

@Entity 
@Table(name = "MYENTITY") 
public class MyEntity { 
... 
    @OneToMany(mappedBy = "myEntity", fetch = FetchType.LAZY) 
    private Set<MyRelatedEntity> myRelatedEntities; 
... 
} 

@Entity 
@Table(name = "MYRELATEDENTITY") 
public class MyRelatedEntity { 
... 
    @ManyToOne 
    @JoinColumn(name = "MYENTITY", nullable = false) 
    private MyEntity myEntity; 
... 
} 

: 나는 다음과 같은 요소를 가지고 가정 데이터베이스에 나와 내 결과를 제공합니다 :

Select myrelent.name from MYENTITY myent, MYRELATEDENTITY myrelent where myent.id = myrelent.myentity; 

기준 API로 작성된 쿼리에 어떤 문제가 있습니까? 어떤 도움을 주셔서 감사합니다!

+0

그리고 질문은 ...? – Taylor

+0

형식이 지정되지 않으면 JPQL을 사용하지 말고 피타를 구해보십시오. – kostja

+0

@kostja : "name"문자열이 동적으로 생성되면 완벽하게 이해됩니다. – perissf

답변

0

Array를 반환하도록 CriteriaBuilder에 지시 할 필요가 없습니다. 어쨌든 올바른 작업을 수행합니다. 따라서, 단순히 문자열로 반환 형식 및 선택 문을 변경 :

CriteriaQuery query = builder.createQuery(String.class); 
Root<MyEntity> root = query.from(MyEntity.class); 
query.select(root.get("myRelatedEntities").get("name")); 
Query queryCriteria = em.createQuery(query); 
List<String> resultRows = queryCriteria.getResultList(); 

관련없는 : 대한 조인, 조인을 만들 수있는 표준 방법은 다음과 같습니다 그것이 알고 좋은 그러나

Join<MyEntity, MyRelatedEntity> related = root.join("myRelatedEntities"); 
query.select(related.get("name")); 

너의 길은 모두 일하는거야!

+0

join 객체 (이 예제에서 "related")를 사용하여 속성을 쿼리하면 내 질문이 해결됩니다. 건배. – user1335772