2014-03-26 148 views
0

我有這樣的:JPQL查詢集合

@ManyToOne(fetch=FetchType.LAZY) 
@Required 
@NoFrame 
@JoinColumn(name="plaga_id") 
@DescriptionsList 
private PlagaOEnfermedad plaga; 

@Required 
@ManyToOne(fetch=FetchType.LAZY) 
@DescriptionsList(depends="this.plaga", condition="", 
     descriptionProperties="nombreCientifico") 
private InsectoAuxiliar auxiliar; 

這表明附配是InsectoAuxiliar.nombreCientififico組合的內容。另外,「depends」表示這個組合內容將加載到另一個組合選擇事件(另一個是「plaga」)。

的問題是,我不知道如何生成的條件,考慮到InsectoAuxiliar包含此:

@ManyToMany(fetch=FetchType.LAZY) 
@JoinTable(name="insectos_plagas", 
     joinColumns={@JoinColumn(name="auxiliar_id",referencedColumnName="nombreCientifico")}, 
     inverseJoinColumns={@JoinColumn(name="plaga_id",referencedColumnName="nombre")}, 
     [email protected](columnNames = { "plaga_id", "auxiliar_id" })) 
private Collection<PlagaOEnfermedad> plagasAplicables; 

我要篩選我的組合取決於「plagasAplicables.nombre」。問題是,我應該如何編寫JPQL查詢以使用Collection ?.在descriptionList(組合)「條件」表示後「WHERE」在JPQL,但不知道怎麼寫呢?

例如,從其他的問題,我曾經嘗試這樣一句話:

@ DescriptionsList(取決於= 「this.plaga」,條件=, 「成員e.plagasAplicables.nombre嗎?」)

但我得到這個錯誤:

產生的原因:org.hibernate.QueryException:非法的意圖,使用元素屬性引用[nombre]取消引用集合[insectoaux0_.nombreCientifico.plagasAplicables] [SELECT e.no mbreCientifico,e.nombreCientifico,e.nombreCientifico從org.openxava.recetas.model.InsectoAuxiliar e其中:e.plagasAplicables.nombre的P0會員]

任何幫助將非常感激......

謝謝前進,

何塞。

回答

0

最後!!:

@DescriptionsList(depends="this.plaga", condition="? IN (SELECT p.nombre FROM PlagaOEnfermedad p WHERE p.nombre MEMBER OF e.plagasAplicables)", 
     descriptionProperties="nombreCientifico") 

這就是所有!