4

你好,

这就是故事:我有一个一对多。一个是“RadicadoOficio”,许多是“RespuestaOficio”

我只想选择所有没有响应的 rads。

这些是实体(为教育目的而缩写):

@Entity
@Table(name="COR_RADICADO_OFICIO")
public class RadicadoOficio {   
    @OneToMany(mappedBy="radicado")
    private List<RespuestaOficio> respuestas;

    @Column(name="requiere_respuesta")
    private Long requiereRespuesta;
}

@Entity
@Table(name="cor_respuesta_oficio")
public class RespuestaOficio {
    @ManyToOne
    @JoinColumns({@JoinColumn(name = "num_radicado"), @JoinColumn(name="ano_radicado")})
    private RadicadoOficio radicado;
}

这个 DAO 方法:

HibernateUtil.getCurrentSession().createQuery("select obj from " + sample.getCanonicalName() + " obj where  obj." + longProp+ " = ? and obj." + childrenProp + " IS EMPTY" )
            .setLong(0, longVal );

    if (firstResult != null) {
        q.setFirstResult(firstResult);
        q.setMaxResults(maxResults);
    }

    return q.list();

呈现这些东西:

radicadoof0_.respuesta_multiple 作为 respuesta17_8_,radicadoof0_.tipo_aplicativo 作为来自 COR_RADICADO_OFICIO 的 radicadoof0_ 其中 radicadoof0_.requiere_respuesta=? 而不是(存在(从 cor_respuesta_oficio respuestas1_ 中选择 respuestas1_.INTERNO_RESPUESTA,其中 radicadoof0_.ANO_RADICADO=respuestas1_.num_radicado 和 radicadoof0_.NUM_RADICADO=respuestas1_.ano_radicado))row_ ) where rownum_ <= ?和 rownum_ > ?

甲骨文抛出了一个我不明白的“无效号码”错误。

欢迎任何帮助,tnx

4

1 回答 1

0

您的 hql 可以与您的参数一起更改为以下内容。这里的变化是使用你 hql 中的所有元素。

createQuery("select r FROM RadicadoOficio r where 0 = all elements(r.respuestas)");

因此,在您的查询中,它看起来像下面的内容

HibernateUtil.getCurrentSession().createQuery("select obj from " + sample.getCanonicalName() + " obj where  obj." + longProp+ " = ? and 0=all elements(obj." + childrenProp + ")" )
        .setLong(0, longVal );
于 2013-01-09T17:25:38.993 回答