2014-03-26 151 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") 

这就是所有!