【问题标题】:Hibernate ERROR: HHH000091休眠错误:HHH000091
【发布时间】:2017-04-07 16:25:33
【问题描述】:

我是休眠新手。我的目标是将查询结果发送到 ArrayList 但我不断收到错误:HHH000091:预期类型:int,实际值:org.hibernate.collection.internal.PersistentSet

我坚信问题出在我的映射中,感谢任何帮助。

错误

错误:HHH000123:类中的 IllegalArgumentException:com.mycompany.mavenproject1.Medicamento,属性的设置方法:labJoin 2017 年 4 月 7 日上午 10:23:10 org.hibernate.property.BasicPropertyAccessor$BasicSetter 设置 错误:HHH000091:预期类型:int,实际值:org.hibernate.collection.internal.PersistentSet

我的 HQL 查询:

from Medicamento as m left join from Laboratorio as l where l.codigoLab=m.codigoLab

映射 XML:

<class name="com.mycompany.mavenproject1.Medicamento" table="MEDICAMENTO" schema="ADMINFARMACIA" optimistic-lock="version">
  <id name="codigoMed" type="long">
            <column name="CODIGO_MED" not-null="true"/>
            <generator class="assigned" />
        </id>
        <property name="nombreComercial" type="string">
            <column name="NOMBRE_COMERCIAL" length="100" not-null="true" />
        </property>
        <property name="codigoPrincipio" type="string">
            <column name="CODIGO_PRINCIPIO" length="50" not-null="true" />
        </property>
        <property name="stockMinimo" type="java.lang.Integer">
            <column name="STOCK_MINIMO" />
        </property>
        <property name="codigoLab" type="java.lang.Integer">
            <column name="CODIGO_LAB"  />
        </property>
        <property name="comentario" type="string">
            <column name="COMENTARIO" length="1000" />
        </property>
        <property name="existencias" type="java.lang.Integer">
            <column name="EXISTENCIAS"/>
        </property>
        <set name="labJoin"  fetch="join">          
            <key column="CODIGO_LAB" />
            <one-to-many class="com.mycompany.mavenproject1.Laboratorio"/>
        </set>
</class>

Laboratorio.java:

public class Laboratorio implements java.io.Serializable{
    private int codigoLab;
    private String nombreLab;

    public Laboratorio(){

    }

    public int getCodigoLab() {
        return codigoLab;
    }

    public void setCodigoLab(int codigoLab) {
        this.codigoLab = codigoLab;
    }

    public String getNombreLab() {
        return nombreLab;
    }

    public void setNombreLab(String nombreLab) {
        this.nombreLab = nombreLab;
    }    
}

Medicamento.java - 在这个 labJoin 和 labName 中是“Laboratorio”表中的字段

public class Medicamento implements java.io.Serializable{
private Long codigoMed;
private String nombreComercial;
private String codigoPrincipio;
private int stockMinimo;
private int codigoLab;
private String comentario;
private int existencias;
private int labJoin;
private String labName;

public Medicamento(){

}
public Long getCodigoMed() {
    return codigoMed;
}

public void setCodigoMed(Long codigoMed) {
    this.codigoMed = codigoMed;
}

public String getNombreComercial() {
    return nombreComercial;
}

public void setNombreComercial(String nombreComercial) {
    this.nombreComercial = nombreComercial;
}

public String getCodigoPrincipio() {
    return codigoPrincipio;
}

public void setCodigoPrincipio(String codigoPrincipio) {
    this.codigoPrincipio = codigoPrincipio;
}

public int getStockMinimo() {
    return stockMinimo;
}

public void setStockMinimo(int stockMinimo) {
    this.stockMinimo = stockMinimo;
}

public int getCodigoLab() {
    return codigoLab;
}

public void setCodigoLab(int codigoLab) {
    this.codigoLab = codigoLab;
}

public int getLabJoin() {
    return labJoin;
}

public void setLabJoin(int labJoin) {
    this.labJoin = labJoin;
}

public String getLabName() {
    return labName;
}

public void setLabJoin(String labName) {
    this.labName= labName;
}

public String getComentario() {
    return comentario;
}

public void setComentario(String comentario) {
    this.comentario = comentario;
}

public int getExistencias() {
    return existencias;
}

public void setExistencias(int existencias) {
    this.existencias = existencias;
}

}

调用方法

private void displayResult(List rl){
            ArrayList<Object> oneRow = new ArrayList<Object>();
            for (Object o: rl){
                Medicamento medList = (Medicamento)o;
                System.out.println(labList.getCodigoLab());
                oneRow.add(medList.getCodigoMed());
                oneRow.add(medList.getExistencias());
                oneRow.add(medList.getNombreComercial());
                oneRow.add(medList.getLabJoin());
            }
            LowStockTableModel model = new LowStockTableModel(oneRow);
            try{
                jTable1.setModel(model);
            }
            catch (Exception e){
                JOptionPane.showMessageDialog(null, e.getLocalizedMessage(),"Error",JOptionPane.ERROR_MESSAGE);
                jTextField1.setText("");
            }
        }

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    在你的映射中,你有这个

    <set name="labJoin"  fetch="join">          
            <key column="CODIGO_LAB" />
            <one-to-many class="com.mycompany.mavenproject1.Laboratorio"/>
        </set>
    

    但属性 labJoin 的类型为 int。此属性的类型必须为Set&lt;Laboratorio&gt;

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 2012-05-14
      • 2012-04-19
      • 2014-03-25
      • 2011-12-03
      • 2011-07-26
      • 2016-11-19
      • 2015-06-15
      相关资源
      最近更新 更多