无法通过hibernate中的反射设置器错误设置字段值

时间:2012-05-29 16:28:45

标签: hibernate reflection mapping setter

我将此类BidToolTradeLanes定义如下:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.catapult.bid.model;

/**
 *
 * @author Alok Shrestha
 */
public class BidToolTradeLanes {
    private int tradeLaneId;
    private String tradeLaneName;
    private int contractId;

public BidToolTradeLanes() {
}
public int getContractId() {
    return contractId;
}

public void setContractId(int contractId) {
    this.contractId = contractId;
}

public int getTradeLaneId() {
    return tradeLaneId;
}

public void setTradeLaneId(int tradeLaneId) {
    this.tradeLaneId = tradeLaneId;
}

public String getTradeLaneName() {
    return tradeLaneName;
}

}

而且,我有上面这个类的映射文件:

<hibernate-mapping package="com.catapult.bid.model"  default-access="field"> 
<class name="BidToolTradeLanes" table="bt_trade_lane" schema="bidtool" >
    <id name="tradeLaneId" type="int" column="trade_lane_id">           
        <generator class="sequence">
             <param name="sequence">bidtool.trade_lane_trade_lane_id_seq</param>
        </generator>
    </id>  

    <property name="tradeLaneName" type="string">
        <column name="tradelane_name" length="20"/>
    </property>      
     <many-to-one class="Contracts" fetch="select" name="contractId">
         <column name="contract_id"/>
    </many-to-one>
</class>

现在,每当我尝试运行此语句时,都会收到错误

List list=session.createSQLQuery("select {t.*} from bidtool.bt_trade_lane t")
                  .addEntity("t",BidToolTradeLanes.class).list();

我收到错误:

could not set a field value by reflection setter of com.catapult.bid.model.BidToolTradeLanes.contractId

我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

由于contractId被映射为<many-to-one>,因此其类型应为Contracts,而不是int

这是数据库模式和对象模型之间的区别:在数据库模式中,您有外键,而在对象模型中,您有对其他对象的引用。

另请注意,contract作为参考的名称将优于contractId,并且对象模型中的类通常以单数形式命名,而不是以复数形式命名。

另见: