【问题标题】:JPQL query for a Collection集合的 JPQL 查询
【发布时间】:2014-05-04 12:02:54
【问题描述】:

我有这个:

@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;

这表明 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(combo)上的“Condition”表示JPQL中“WHERE”之后的句子,但不知道如何写......

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

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

但我收到此错误:

原因:org.hibernate.QueryException:非法尝试取消引用集合 [insectoaux0_.nombreCientifico.plagasAplicables] 与元素属性引用 [nombre] [SELECT e.nombreCientifico, e.nombreCientifico, e.nombreCientifico from org.openxava.recetas .model.InsectoAuxiliar e WHERE :p0 MEMBER OF e.plagasAplicables.nombre]

任何帮助将不胜感激...

提前致谢,

何塞。

【问题讨论】:

    标签: sql jpa jpql openxava


    【解决方案1】:

    终于!!:

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

    就是这样!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 2017-12-23
      • 1970-01-01
      • 2013-03-22
      • 2021-11-21
      • 2015-08-13
      • 2017-04-12
      • 2020-06-11
      相关资源
      最近更新 更多