2013-11-25 4 views
3

저는 첫 번째 웹샵에서 작업 할 때 검색 할 때 객체를 검색하는 데 어려움이 있습니다. 기존 제품을 검색하면 productHits 목록이 비어있게됩니다. EntityManager # getResultList()는 빈 목록을 반환합니다.

다음은 제품 카탈로그의 (전체 프로젝트를 읽으려면 https://github.com/gitsjogren/TareaWebShop를 참조하십시오) :

public final class ProductCatalogue extends AbstractDAO<Product, Long> implements IProductCatalogue { 

    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("shop_pu"); 
    private static Product p1; 
    private static Customer c1; 

@Override 
    public List<Product> search(String searchWord){ 
     EntityManager em = emf.createEntityManager(); 
     List<Product> prodHits = new ArrayList<>(); 
     try { 
      String sqlQuery = "SELECT p FROM Product p WHERE p.name LIKE :theSearch"; 
      TypedQuery<Product> q = em.createQuery(sqlQuery, Product.class); 
      String searchQuery = "%" + searchWord + "%"; 
      q.setParameter("theSearch", searchQuery); 
      prodHits = (List<Product>) q.getResultList(); 
     } catch (Exception e) { 
      System.out.print(e); 
     } 
     em.close(); 
     return prodHits; 
}  

가 나는 또한 행운과 더불어, TypedQuery 대신 NativeQuery를 사용하여 시도했다.

Query q = em.createNativeQuery(sqlQuery, Product.class); 
+0

귀하의 검색어가 올바른 것 같습니다. 아마도 데이터가 없습니다. – vels4j

+0

네이티브 SQL을 사용하는 쿼리 문자열이 네이티브 SQL이지만 createQuery를 사용하여 JPQL 문자열을 예상하고 엔티티 클래스를 매개 변수로 사용하지 않는다면 예외가 발생하지 않는 이유를 모르겠습니다. createNativeQuery를 사용하고 있습니까? 그렇다면 데이터베이스에 데이터가 있는지 확인하십시오. JPA 응용 프로그램에 사용되는 로그인 자격 증명이 데이터가있는 데이터베이스로 연결되지 않을 수 있습니다. – Chris

+0

예외가 발생하지 않습니까? 'catch '문이 있습니다 - 인쇄되는 것이 있습니까? 디버깅을 시도 했습니까? 단순히'*'를'p'로 바꾸면 원래의 JPQL 쿼리를 고칠 수 있습니다. – DannyMo

답변

0

만약 당신이있어 아직 대답하지 않았다 : 당신은 DB에서 해당 테이블에 커밋되지 않은 뭔가가있을 때 일어날 수

합니다. 이 경우 DB에서 동일한 쿼리를 실행하면 실제 답변을 얻을 수 있지만 코드에서 실행하면 빈 목록이 반환 될 수 있습니다.

관련 문제