我剛開始在一個新項目中使用Hibernate,並且使用第一個實體時,出現了一個我似乎無法弄清楚的錯誤。休眠無法加載實體錯誤
我現在的模式只是兩個表,大洲和國家,其中國家有一個continentid外鍵。
當我嘗試運行調用continents實體的代碼時,我得到一個空白頁。所有處理都停止,但不顯示錯誤。當我通過MXUnit運行代碼時,實際發生錯誤。錯誤消息只是Could Not Load an Entity: [continent#1]
。異常的原因是org.hibernate.exception.SQLGrammarException
。這就是我所得到的。
我的實際實體的代碼是:
Continent.cfc
component tablename='continents' persistent=true output=false{
property name='id' type='numeric' fieldtype='id' datatype='integer';
property name="name" type='string' length='45';
property name='bonus' type='numeric';
property name='countries' type='array' fieldtype='one-to-many' cfc='Country' singularname='country' inverse='true' fkcolumn='continentid' cascade='all-delete-orphan';
public Country function init(string name='', numeric bonus=0){
setName(Arguments.name);
return this;
}
}
Country.cfc
component tablename='countries' persistent=true output=false{
property name='id' type='numeric' fieldtype='id' datatype='integer' generator="identity";
property name="name" type='string' length='45';
property name='continent' fieldtype='many-to-one' fkcolumn='continentid' cfc='Continent' missingRowIgnored=true;
public Country function init(string name=''){
setName(Arguments.name);
return this;
}
}
並調用該方法的代碼。它是在一個ColdSpring豆
ContinentBean.cfc
component {
property name="continent" type="any";
public any function init(any continent=''){
if(len(Arguments.continent))setContinent(Arguments.continent);
return this;
}
public any function getContinent(){
return continent;
}
public void function setContinent(numeric continent){
continent = EntityLoad('Continent', Arguments.continent, true);
}
public void function setMapService(mapService){variables.instance['mapService'] = Arguments.mapService;}
public any function getMapService(){return variables.instance['mapService'];}
}
我找不到真正關心的錯誤消息,我可以瞭解任何信息,所以這可能僅僅是一個無效的語法的事情。
唯一讓我覺得奇怪的是'datatype'。我從來沒有用過它,我認爲只有''ormtype''和''sqltype''。你可以嘗試刪除它並做一個'ORMReload()'看看它是否有效?另外,仔細查看堆棧跟蹤,有時你會看到一些有用的東西。然後打開ormsettings.logsql來檢查生成的SQL是否有意義。 – Henry 2011-06-01 00:10:24