提问者:小点点

集合的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. norbreCientififico为内容的组合。此外,“依赖”表示此组合内容将加载到另一个组合选择事件(另一个是“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. numbre”过滤我的组合。问题是,我应该如何编写JPQL查询以使用Collection?描述符列表(组合)上的“条件”表示JPQL中“WHERE”之后的句子,但不知道如何编写…

例如,从其他问题中,我尝试了这个:

@描述列表(取决于="this. plaga",条件="?e.plagasAplicables.nambre"的成员,)

但是我得到这个错误:

由以下原因引起:org. hibernate.QueryException:非法尝试取消引用集合[insectoaux0_.norbreCientifico.plagasAplicables]与元素属性引用[nambre][从org.openxava.recetas.model.InsectoAuxiliar e WHERE:p0 MEMBER OF e.plagasAplicables.numbre]选择e.nambreCientifico,e.norbreCientifico,e.norbreCientifico]

任何帮助将不胜感激…

提前感谢,

何塞。


共1个答案

匿名用户

终于!!:

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

这就是全部!