2015-01-21 8 views

답변

0

어쩌면 이상적인 솔루션,하지만 자바 제네릭 JPA가 함께 힌트를 사용하려고 할 수 있습니다 :

public <T> TypedQuery<T> 
createBatchQuery(String ql, Class<T> clazz, String type, String size, String relation) { 
    return em.createQuery(jpql, clazz) 
      .setHint(QueryHints.BATCH_TYPE, type) 
      .setHint(QueryHints.BATCH_SIZE, size) 
      .setHint(QueryHints.BATCH, relation); 
} 

위의 쿼리는 다음 전 세계적으로 사용하고 필요에 따라 콘크리트 쿼리 구현과 연장 될 수있다, 즉,이 주제에

String jpql = "SELECT c FROM Country c WHERE c.name = :name"; // or @NamedQuery 
TypedQuery<Country> q = createBatchQuery(jpql, Country.class, "JOIN", "64", "c.cities"); 
q.setParameter("name", "Australia"); 
Country c = q.getSingleResult(); 

기사 :

+0

는 형태 보증으로하지 않고 일반 API는 더 자세한 될 것입니다. 또한 더 높은 수준의 api를 사용한다면 쿼리를 위해 (deltaspike data는 내가 사용하는 것입니다) 그렇게 설정할 수 없습니다. –

+0

'c.cities'는 JPQL 규칙을 따르므로'TypedQuery.setHint '메소드와'@ QueryHint' 주석을 사용합니다. 불행히도 DeltaSpike에 대해서는 알지 못하지만 이러한 쿼리에는 반드시 javax.persistence.EntityManager를 사용할 수 있습니다. – wypieprz