从休眠实体检索数据时出错

时间:2021-01-30 12:13:39

标签: java mysql sql hibernate debian

我是 Hibernate 的新手,开始使用一个小项目来测试它的工作原理,到目前为止一切顺利,但现在我在检索对 CRUD 类执行 2 查询的数据时遇到了一个奇怪的问题。

错误是这样的:

<块引用>

调用 Model.EquipoEntity.nombre 的 getter 时发生 IllegalArgumentException

让我先让您了解相关信息:

我正在使用 2 个类 EquipoEntityJugadorEntity

EquipoEntity 类:

public class EquipoEntity {
    private String nombre;
    private String ciudad;
    private String conferencia;
    private String division;
public String getNombre() {
    return nombre;
}

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

public String getCiudad() {
    return ciudad;
}

public void setCiudad(String ciudad) {
    this.ciudad = ciudad;
}

public String getConferencia() {
    return conferencia;
}

public void setConferencia(String conferencia) {
    this.conferencia = conferencia;
}

public String getDivision() {
    return division;
}

public void setDivision(String division) {
    this.division = division;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    EquipoEntity that = (EquipoEntity) o;
    return Objects.equals(nombre, that.nombre) && Objects.equals(ciudad, that.ciudad) && Objects.equals(conferencia, that.conferencia) && Objects.equals(division, that.division);
}

@Override
public int hashCode() {
    return Objects.hash(nombre, ciudad, conferencia, division);
}
}

EquiposEntity 休眠 XML 文件:

<class name="Model.EquipoEntity" table="equipos" schema="NBA">
    <id name="nombre">
        <column name="Nombre" sql-type="varchar(20)" length="20"/>
    </id>
    <property name="ciudad">
        <column name="Ciudad" sql-type="varchar(20)" length="20" not-null="true"/>
    </property>
    <property name="conferencia">
        <column name="Conferencia" sql-type="varchar(4)" length="4" not-null="true"/>
    </property>
    <property name="division">
        <column name="Division" sql-type="varchar(9)" length="9" not-null="true"/>
    </property>
</class>

JugadorEntity 类:

public class JugadorEntity {
    private int codigo;
    private String nombre;
    private String procedencia;
    private String altura;
    private Integer peso;
    private String posicion;
    private EquipoEntity equiposByNombreEquipo;

public int getCodigo() {
    return codigo;
}

public void setCodigo(int codigo) {
    this.codigo = codigo;
}

public String getNombre() {
    return nombre;
}

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

public String getProcedencia() {
    return procedencia;
}

public void setProcedencia(String procedencia) {
    this.procedencia = procedencia;
}

public String getAltura() {
    return altura;
}

public void setAltura(String altura) {
    this.altura = altura;
}

public Integer getPeso() {
    return peso;
}

public void setPeso(Integer peso) {
    this.peso = peso;
}

public String getPosicion() {
    return posicion;
}

public void setPosicion(String posicion) {
    this.posicion = posicion;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    JugadorEntity that = (JugadorEntity) o;
    return codigo == that.codigo && Objects.equals(nombre, that.nombre) && Objects.equals(procedencia, that.procedencia) && Objects.equals(altura, that.altura) && Objects.equals(peso, that.peso) && Objects.equals(posicion, that.posicion);
}

@Override
public int hashCode() {
    return Objects.hash(codigo, nombre, procedencia, altura, peso, posicion);
}

public EquipoEntity getEquiposByNombreEquipo() {
    return equiposByNombreEquipo;
}

public void setEquiposByNombreEquipo(EquipoEntity equiposByNombreEquipo) {
    this.equiposByNombreEquipo = equiposByNombreEquipo;
}
}

JugadoresEntity 休眠 XML 文件:

<class name="Model.JugadorEntity" table="jugadores" schema="NBA">
    <id name="codigo">
        <column name="codigo" sql-type="int(11)"/>
    </id>
    <property name="nombre">
        <column name="Nombre" sql-type="varchar(30)" length="30" not-null="true"/>
    </property>
    <property name="procedencia">
        <column name="Procedencia" sql-type="varchar(20)" length="20" not-null="true"/>
    </property>
    <property name="altura">
        <column name="Altura" sql-type="varchar(4)" length="4" not-null="true"/>
    </property>
    <property name="peso">
        <column name="Peso" sql-type="int(11)" not-null="true"/>
    </property>
    <property name="posicion">
        <column name="Posicion" sql-type="varchar(12)" length="12" not-null="true"/>
    </property>
    <many-to-one name="equiposByNombreEquipo" class="Model.EquipoEntity">
        <column name="Nombre_equipo" not-null="true"/>
    </many-to-one>
</class>

我也在使用 CRUD 类:

所以基本上我必须为每个equipo(团队)检索属于该团队的所有球员以及他们的 ID。我的策略基于对团队的每个名称进行迭代,并在 JugadorEntity 上使用该值(存储在字符串数组中)执行查询并获取该团队的所有球员,我能够显示团队并创建数组,然后我调用另一个 CRUD 方法,该方法根据循环的位置打印团队的每个名称,但是由于某种原因,当我执行查询并尝试将结果存储在列表中时,我收到了该错误

CRUD 方法:

EquipoEntity CRUD 方法:

public void muestraMediaPorEquiposYPartido() {


    int contador = 0;

    Session session = MySQLConnection.getSession();
    SessionFactory sessionFactory = MySQLConnection.getOurSessionFactory();
    Transaction tx = session.beginTransaction();

    //Query to load all the teams 
    Query getAllTeamsQuery = session.createQuery("from EquipoEntity ORDER BY nombre");
    List<EquipoEntity> list = (List<EquipoEntity>) getAllTeamsQuery.list();

    //String array to store team names
    String[] names = new String[list.size()];

    System.out.println("NUMERO DE EQUIPOS: " + list.size());


    //This loop will iterate over each team name and call another CRUD method associated with the
    // JugadorEntity class that prints the name
    for (int j = 0; j < list.size(); j++) {
        names[j] = list.get(j).getNombre();
        System.out.println("Equipo " + (j + 1) + ": " + names[j]);
        jugador_crud.selectByTeamName(names[j]);
    }


    session.close();

}

JugadorEntity CRUD 方法:

public void selectByTeamName(String teamName){

    Session session = MySQLConnection.getSession();
    SessionFactory sessionFactory = MySQLConnection.getOurSessionFactory();
    Transaction tx = session.beginTransaction();

    //This query will load all the players
    Query q = session.createQuery("FROM JugadorEntity WHERE equiposByNombreEquipo = :equipo");
    q.setParameter("equipo", teamName);


    List<JugadorEntity> list = (List<JugadorEntity>) q.list();
    int contador = 0;


    //This loop will print all the names of the players who belongs to the given team
    for (int i = 0; i < list.size(); i++) {
        //And here is where I get the error !!!!!
        System.out.println(list.get(i).getNombre() + "             ");
        contador++;

    }

    System.out.println("\n**********************************************************");
    System.out.println("Numero de registros: " + contador);
    System.out.println("**********************************************************");



}

我希望得到任何信息或建议!

谢谢

0 个答案:

没有答案
相关问题