java - 从 Hibernate 实体检索数据时出错
问题描述
我是 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("**********************************************************");
}
我将不胜感激任何信息或建议!
谢谢
解决方案
推荐阅读
- reactjs - 获取 findindex() 未涵盖的消息语句和函数,并且某些分支未涵盖为 selectedgroup[0].desc
- python - 熊猫按时间和分组滚动条件总和
- jms - 如何为 JmsListener 收到的每条消息设置超时?
- anylogic - 3天内任何逻辑。实验 - CompareRuns
- android - appbar内的Android工具栏:所有菜单始终显示在左侧
- opencart-3 - 致命错误:未捕获 /journal/storage/vendor/twig/twig/src/Loader/ArrayLoader.php | opencart3.6
- python - Python - 深度优先搜索非递归方法
- arm64 - llvm/ompiler-rt sanitizer 不支持 aarch64 ilp32:asan_interceptors_vfork.S 与 aarch64 ilp32 不兼容
- flutter - Flutter 中是否有用于 3D 饼图的库?
- php - 为什么 openssl_decrypt 在输出数据中添加转义斜线?