0

私は休止状態で最初の試行を行っていますが、この質問があります。

私がこの相談をするとき、私は正しい結果を得る

List result = session.createQuery("select t from Tarea t where t.subtipo = 1").list();

しかし、1つのパラメーターを使用すると、エラーが発生します

List result = session.createQuery("select t from Tarea t where t.subtipo = :subtipo").
            setParameter("subtipo", 1).list();

エラーは次のとおりです。

ERROR org.hibernate.property.BasicPropertyAccessor - IllegalArgumentException in class: com.hibernate.gip.modelo.SubTipo, getter method of property: id_subtipo
[ERROR] IllegalArgumentException occurred calling getter of com.hibernate.gip.modelo.SubTipo.id_subtipo
java.lang.reflect.InvocationTargetException

多分私はnewbeのようなものを忘れました...誰かがそれを解決できますか?前もって感謝します!

編集...

SubTipo.java

public class SubTipo {

// Atributos
private int id_subtipo;
private String nombre;
private Tipo tipo;

private Set<Incidencia> incidencias = new HashSet<Incidencia>();
private Set<Tarea> tareas = new HashSet<Tarea>();

// Constructores
public SubTipo() {}

public SubTipo(int id, String nom, Tipo tip, Set<Tarea> tar, Set<Incidencia> inc) {
    this.id_subtipo = id;
    this.nombre = nom;
    this.tipo = tip;
    this.incidencias = inc;
    this.tareas = tar;
}

// Getters & Setters
public int getId_subtipo() {
    return id_subtipo;
}

public void setId_subtipo(int id_subtipo) {
    this.id_subtipo = id_subtipo;
}

public String getNombre() {
    return nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}

public Tipo getTipo() {
    return tipo;
}

public void setTipo(Tipo tipo) {
    this.tipo = tipo;
}

public Set<Incidencia> getIncidencias() {
    return incidencias;
}

public void setIncidencias(Set<Incidencia> incidencias) {
    this.incidencias = incidencias;
}

public Set<Tarea> getTareas() {
    return tareas;
}

public void setTareas(Set<Tarea> tareas) {
    this.tareas = tareas;
}

}

SubTipoマッピングファイル

<hibernate-mapping package="com.hibernate.gip.modelo">

<class name="SubTipo" table="SUBTIPO">

    <id name="id_subtipo" type="int">
        <column name="ID_SUBTIPO" />
        <generator class="assigned" />
    </id>

    <property name="nombre" type="java.lang.String">
        <column name="NOMBRE" />
    </property>

    <many-to-one name="tipo" class="com.hibernate.gip.modelo.Tipo">
        <column name="TIPO" not-null="true" />
    </many-to-one>

    <set name="incidencias" table="INCIDENCIA">
        <key>
            <column name="SUBTIPO" />
        </key>
        <one-to-many class="com.hibernate.gip.modelo.Incidencia" />
    </set>

    <set name="tareas" table="TAREA">
        <key>
            <column name="SUBTIPO" />
        </key>
        <one-to-many class="com.hibernate.gip.modelo.Tarea" />
    </set>

</class>

</hibernate-mapping>

その必要な他のクラス?ありがとう

再編集

Tarea.java

public class Tarea {

// Atributos
private String id_tarea;
private String nombre;
private int t_limite;

private Tarea precedente;
private SubTipo subtipo;

private Set<iTarea> iTareas = new HashSet<iTarea>();

// Constructores
public Tarea() {}

public Tarea(String id, String nom, int lim, Tarea pre, SubTipo sub, Set<iTarea> iTa) {
    this.id_tarea = id;
    this.nombre = nom;
    this.t_limite = lim;
    this.precedente = pre;
    this.subtipo = sub;
    this.iTareas = iTa;
}

// Getters & Setters
public String getId_tarea() {
    return id_tarea;
}

public void setId_tarea(String id_tarea) {
    this.id_tarea = id_tarea;
}

public String getNombre() {
    return nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}

public int getT_limite() {
    return t_limite;
}

public void setT_limite(int t_limite) {
    this.t_limite = t_limite;
}

public Tarea getPrecedente() {
    return precedente;
}

public void setPrecedente(Tarea precedente) {
    this.precedente = precedente;
}

public SubTipo getSubtipo() {
    return subtipo;
}

public void setSubtipo(SubTipo subtipo) {
    this.subtipo = subtipo;
}

public Set<iTarea> getiTareas() {
    return iTareas;
}

public void setiTareas(Set<iTarea> iTareas) {
    this.iTareas = iTareas;
}   

}

タレアマッピング

<hibernate-mapping package="com.hibernate.gip.modelo">

<class name="Tarea" table="TAREA">

    <id name="id_tarea" type="java.lang.String">
        <column name="ID_TAREA" />
        <generator class="assigned" />
    </id>

    <property name="nombre" type="java.lang.String">
        <column name="NOMBRE" />
    </property>

    <property name="t_limite" type="int">
        <column name="T_LIMITE" />
    </property>

    <many-to-one name="precedente" class="com.hibernate.gip.modelo.Tarea" unique="true"> </many-to-one>

    <many-to-one name="subtipo" class="com.hibernate.gip.modelo.SubTipo">
        <column name="SUBTIPO" not-null="true"/>
    </many-to-one>

    <set name="iTareas" table="ITAREA">
        <key>
            <column name="TAREA" />
        </key>
        <one-to-many class="com.hibernate.gip.modelo.iTarea" />
    </set>

</class>

</hibernate-mapping>
4

1 に答える 1

0

hqlで作業しているときは、行ではなくオブジェクトで作業していることを忘れないでください。

クエリで渡すパラメータはIDであり、オブジェクトではありません。あなたが試すことができます :

List result = session.createQuery("select t from Tarea t where t.subtipo.id_subtipo = :subtipoId").setParameter("subtipoId", 1).list();

試行したクエリは、IDではなくのpersitedインスタンスを渡した場合に機能する可能性がありますsubtipo

于 2013-02-27T22:00:18.673 に答える