用于集合的JPQL查询

时间:2014-03-26 08:16:44

标签: sql jpa jpql openxava

我有这个:

@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")},
        uniqueConstraints=@UniqueConstraint(columnNames = { "plaga_id", "auxiliar_id" }))
private Collection<PlagaOEnfermedad> plagasAplicables;

我想根据“plagasAplicables.nombre”过滤我的组合。问题是,如何编写JPQL查询以使用Collection?。 descriptionList(组合)中的“Condition”表示JPQL中“WHERE”之后的句子,但不知道如何编写它......

例如,我尝试过其他问题:

@DescriptionsList(depends =“this.plaga”,condition =“?e.plagasAplicables.nombre的成员”, )

但是我收到了这个错误:

引起:org.hibernate.QueryException:非法尝试使用元素属性引用[nombre]取消引用集合[insectoaux0_.nombreCientifico.plagasAplicables] [SELECT e.nombreCientifico,e.nombreCientifico,e.nombreCientifico from org.openxava.recetas .model.InsectoAuxiliar e WHERE:p0成员e.plagasAplicables.nombre]

非常感谢任何帮助...

提前致谢,

何。

1 个答案:

答案 0 :(得分:0)

最后!!:

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

多数民众赞成!