Hibernate 冬眠咨询中的奇怪错误
我在hibernate做我的第一次尝试,我得到了这个问题 当我这样做时,我得到了正确的结果Hibernate 冬眠咨询中的奇怪错误,hibernate,getter,illegalargumentexception,createquery,Hibernate,Getter,Illegalargumentexception,Createquery,我在hibernate做我的第一次尝试,我得到了这个问题 当我这样做时,我得到了正确的结果 List result = session.createQuery("select t from Tarea t where t.subtipo = 1").list(); 但是如果我使用一个参数,给我一个错误 List result = session.createQuery("select t from Tarea t where t.subtipo = :subtipo").
List result = session.createQuery("select t from Tarea t where t.subtipo = 1").list();
但是如果我使用一个参数,给我一个错误
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
也许我忘了纽贝之类的东西。。。有人能解决吗??
提前谢谢
编辑
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;
}
}
公共类子类{
//心房肌
私人内部id_子IPO;
私有字符串名称;
私人桋桋桋;
private Set incidencias=new HashSet();
私有集tareas=新HashSet();
//建设者
公共子IPO(){}
公共子IPO(整数id、字符串名称、Tipo tip、Set tar、Set inc){
this.id_subtipo=id;
this.nombre=nom;
this.tipo=tip;
本事件=inc;
this.tareas=焦油;
}
//接球手和接球手
public int getId_subtipo(){
返回id_subtipo;
}
公共无效集合id_子IPO(内部id_子IPO){
this.id_subtipo=id_subtipo;
}
公共字符串getNombre(){
返回nombre;
}
public void setNombre(字符串nombre){
this.nombre=nombre;
}
公共Tipo getTipo(){
返回提坡;
}
公共无效设置Tipo(Tipo Tipo){
this.tipo=tipo;
}
公共集getIncidencias(){
复发率;
}
公共无效设置发生率(设置发生率){
this.incidencias=incidencias;
}
公共集合区域(){
返回时间;
}
公共无效集合时间(集合时间){
this.tareas=tareas;
}
}
子IPO映射文件
<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>
有必要上别的课吗?谢谢
重新编辑
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;
}
}
公共类Tarea{
//心房肌
私有字符串id_tarea;
私有字符串名称;
私人国际贸易有限公司;
私有跗骨;
私人子IPO子IPO;
私有集iTareas=newhashset();
//建设者
公共Tarea(){}
公共Tarea(字符串id、字符串nom、int lim、Tarea pre、subtio sub、Set iTa){
this.id_tarea=id;
this.nombre=nom;
这一点t_limite=lim;
this.prevente=pre;
this.subtipo=sub;
this.iTareas=iTa;
}
//接球手和接球手
公共字符串getId_tarea(){
返回id_tarea;
}
公共无效集合id_tarea(字符串id_tarea){
this.id_tarea=id_tarea;
}
公共字符串getNombre(){
返回nombre;
}
public void setNombre(字符串nombre){
this.nombre=nombre;
}
公共int GET_limite(){
返回t_limite;
}
公共无效设置限制(内部设置限制){
this.t_limite=t_limite;
}
公共行政区{
返回先例;
}
公共无效先例(Tarea Prevente){
this.prevente=prevente;
}
public SubTipo getSubtipo(){
回报子IPO;
}
公开作废证券(子IPO子IPO){
this.subtipo=subtipo;
}
公共集getiTareas(){
返回ITAREA;
}
公共无效集合区域(集合区域){
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>
当您在hql中工作时,不要忘记您在处理对象,而不是行 在查询中传递的参数是id而不是对象。 您可以尝试:
List result = session.createQuery("select t from Tarea t where t.subtipo.id_subtipo = :subtipoId").setParameter("subtipoId", 1).list();
如果您将
subtipo
的一个分散实例而不是id传递给它,您尝试的查询可能会工作。请发布您的实体代码,因为您的错误似乎来自它们。Subtypo.id的类型是什么?编辑,谢谢你的时间。你还应该添加Tarea类。完成了,很抱歉,它解决了我的问题,谢谢你的帮助。我确实像你告诉我的那样,在参数和work=)中使用了subtipo对象