我将此类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
我们将不胜感激。
答案 0 :(得分:2)
由于contractId
被映射为<many-to-one>
,因此其类型应为Contracts
,而不是int
。
这是数据库模式和对象模型之间的区别:在数据库模式中,您有外键,而在对象模型中,您有对其他对象的引用。
另请注意,contract
作为参考的名称将优于contractId
,并且对象模型中的类通常以单数形式命名,而不是以复数形式命名。
另见: