【问题标题】:JPA hibernate SQL queryJPA 休眠 SQL 查询
【发布时间】:2013-06-09 13:31:50
【问题描述】:

嘿,我对 JPA hibernate SQL 查询有疑问,我从一个基本属性和一个在列表中的基本实体中搜索一个元素。所以我必须与数组字符串进行比较,因为我使用了多类型搜索。 我的 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 个元素但元素在里面!我知道它的方法代码不好,但这是我的想法 :) 感谢您的帮助并提高我的知识。

【问题讨论】:

    标签: java hibernate jpa sql-like


    【解决方案1】:

    由于您已经在实体中定义了多对多关系,因此无需在查询中再次调用联接。

    你可以把你的查询改成这样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-24
      • 2015-01-25
      • 2020-11-13
      • 2018-08-30
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      相关资源
      最近更新 更多