簡體   English   中英

JPA休眠SQL查詢

[英]JPA hibernate SQL query

嘿,我在JPA休眠SQL查詢中遇到問題,在該查詢中,我從一個基本屬性中搜索一個元素,而該元素位於List的基本實體中。 所以我必須與數組字符串進行比較,因為我使用了多類型搜索。 我的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;

第二:

@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個屬性進行比較,一個是Dejavnosti.naziv,第二個是Dejavnosti.produktis.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不起作用,因為返回了0個元素,但是元素卻在里面! 我知道它的方法代碼很糟糕,但這是我的主意:)感謝您的幫助和提高我的知識。

由於您已經在實體中定義了多對多關系,因此無需再次在查詢中調出聯接。

您可以將查詢更改為以下內容

SELECT c FROM Dejavnosti WHERE c.produktis.naziv LIKE ? OR c.naziv LIKE ?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM