嘿,我对 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 个元素但元素在里面!我知道这是一个糟糕的方法代码,但这是我的想法:) 感谢您的帮助并提高我的知识。