我是 Hibernate 的新手,开始使用一个小项目来测试它的工作原理,到目前为止一切顺利,但现在我在检索对 CRUD 类执行 2 查询的数据时遇到了一个奇怪的问题。
错误是这样的:
<块引用>调用 Model.EquipoEntity.nombre 的 getter 时发生 IllegalArgumentException
让我先让您了解相关信息:
我正在使用 2 个类 EquipoEntity
和 JugadorEntity
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("**********************************************************");
}
我希望得到任何信息或建议!
谢谢