1

このクラス 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

あなたの助けに感謝します。

4

1 に答える 1

2

は、 ではなくであるべき型contractIdとしてマッピングされるため。<many-to-one>Contractsint

これがデータベース スキーマとオブジェクト モデルの違いです。データベース スキーマには外部キーがありますが、オブジェクト モデルには他のオブジェクトへの参照があります。

またcontract、参照の名前は よりも適切であることcontractId、およびオブジェクト モデルのクラスは通常、複数形ではなく単数形で名前が付けられることに注意してください。

以下も参照してください。

于 2012-05-29T16:48:53.720 に答える