4

やあ、

これは話です: 私は 1 対多を持っています。1 つは「RadicadoOficio」で、多くは「RespuestaOficio」です。

resps を持たないすべての rad を選択したいだけです。

これらはエンティティです(教育目的で短縮されています):

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

このものをレンダリングします:

COR_RADICADO_OFICIOからのradicadoof0_.respuesta_multipleはrespuesta17_8_として、radicadoof0_.tipo_aplicativoはtipo18_8_として and not (exists (respuestas1_.INTERNO_RESPUESTA from cor_respuesta_oficio respuestas1_ where 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 に答える