[英]JPA hibernate SQL query
Hey i have problem with JPA hibernate SQL query where i serach a elements from one basic attribute and one which is in the basic entity in the List. 嘿,我在JPA休眠SQL查询中遇到问题,在该查询中,我从一个基本属性中搜索一个元素,而该元素位于List的基本实体中。 so i have to compare with array string, beacause i using a multitype search. 所以我必须与数组字符串进行比较,因为我使用了多类型搜索。 my JPA one is: 我的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;
And second: 第二:
@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;
and this is my method in EJB which have input List searchwords to compare with 2 attributes one is Dejavnosti.naziv and second Dejavnosti.produktis.naziv: 这是我在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;
}
I don't have errors but sql doesn't work, beacuse return 0 elements but the elemenets are in! 我没有错误,但是sql不起作用,因为返回了0个元素,但是元素却在里面! i know its a bad code in method but this is my idea :) Thanks for help and to improve my knowledge. 我知道它的方法代码很糟糕,但这是我的主意:)感谢您的帮助和提高我的知识。
Since you've already defined your many-to-many relationship in your entities, there's no need to call out the join in you query again. 由于您已经在实体中定义了多对多关系,因此无需再次在查询中调出联接。
You would change your query to something like this 您可以将查询更改为以下内容
SELECT c FROM Dejavnosti WHERE c.produktis.naziv LIKE ? OR c.naziv LIKE ?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.