2013-06-09 2 views
0

안녕하세요, JPA hibernate SQL 쿼리에 문제가 있습니다. 여기서는 하나의 기본 속성에서 요소를 검색하고 목록의 기본 엔터티에있는 요소를 검색합니다. 그래서 배열 문자열, 멀티 코어 검색을 사용 beacause와 비교해야합니다.JPA hibernate SQL 쿼리

@Entity 
    public class Dejavnosti implements Serializable { 
private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name="id_dejavnosti") 
private int idDejavnosti; 
    private String naziv; 



//bi-directional many-to-one association to Lokacija 
@ManyToOne 
private Lokacija lokacija; 

//bi-directional many-to-many association to Produkti 
@ManyToMany 
@JoinTable(
    name="dejavnosti_produkti" 
    , joinColumns={ 
     @JoinColumn(name="dejavnosti_id_dejavnosti") 
     } 
    , inverseJoinColumns={ 
     @JoinColumn(name="produkti_id_produkti") 
     } 
    ) 
private List<Produkti> produktis; 

둘째 : 내 JPA 하나입니다

@Entity 
    public class Produkti implements Serializable { 
private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name="id_produkti") 
private int idProdukti; 

    private String naziv; 

//bi-directional many-to-many association to Dejavnosti 
@ManyToMany(mappedBy="produktis") 
private List<Dejavnosti> dejavnostis; 

이 2와 비교하기 입력 목록 searchwords 하나 Dejavnosti.naziv 및 초 Dejavnosti.produktis 인 속성을 가지고 EJB 내 방법입니다 .naziv :

public List<Dejavnosti> Isci(List<String> selectedTexts){ 

      String klic="SELECT c FROM Dejavnosti c INNER JOIN c.produktis dp WHERE " ; 

       for(int i=0;i<selectedTexts.size();i++){ 
       klic=klic+"c.naziv LIKE '%" +selectedTexts.get(i) + "%' OR "; 
       klic=klic+"dp.naziv LIKE '%" +selectedTexts.get(i) + "%' "; 
       //zadnjič ne doda OR 
       if(!(i+1==selectedTexts.size())){ 
        klic=klic+" OR "; 
       } 



       } 


     List<Dejavnosti> dejavnosti=em.createQuery(klic,Dejavnosti.class).getResultList(); 


     return dejavnosti; 

    } 

오류가 없지만 SQL이 작동하지 않으면 beacuse가 0 요소를 반환하지만 elemenets는 있습니다! 나는 그 방법에 나쁜 코드를 알고 있지만 이것은 내 생각이다 :) 도움을 주셔서 감사하고 내 지식을 향상시킬 수 있습니다.

답변

0

이미 엔티티에서 다 대다 관계를 정의 했으므로 조회에서 조인을 다시 호출 할 필요가 없습니다.

당신이

SELECT c FROM Dejavnosti WHERE c.produktis.naziv LIKE ? OR c.naziv LIKE ? 
처럼 뭔가에 쿼리를 변경할 것