0

JPA hibernate SQL クエリに問題があり、1 つの基本属性とリストの基本エンティティにある要素を検索します。マルチタイプ検索を使用しているため、配列文字列と比較する必要があります。私のJPAは次のとおりです。

@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;

そして2番目:

@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;

これはEJBの私のメソッドで、2つの属性と比較するためのリスト検索語を入力しています。

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 が機能しません。なぜなら、0 の要素を返すためですが、要素は入っています! メソッドのコードが悪いことは知っていますが、これは私の考えです:)助けてくれて、私の知識を向上させてくれてありがとう。

4

1 に答える 1

0

エンティティで多対多の関係を既に定義しているため、クエリで結合を再度呼び出す必要はありません。

クエリを次のように変更します

SELECT c FROM Dejavnosti WHERE c.produktis.naziv LIKE ? OR c.naziv LIKE ?
于 2013-07-16T02:28:35.053 に答える