I just started using Hibernate on a new project, and with my first entity, I got an error, that I can't seem to figure out.
My schema right now is just two tables, continents and countries, where country has a continentid foreign key.
When I try to run code that calls the continents entity, I get a blank page. All processing just stops, but no error is displayed. When I run the code through MXUnit, I actually get an error. The error message is simply Could Not Load an Entity: [continent#1]
. The cause of the exception is org.hibernate.exception.SQLGrammarException
. That is all the I get.
My actual entity code is:
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;
}
}
And the code that calls the method. It is in a ColdSpring bean
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'];}
}
I couldn't find any information really about the error message that I could understand, so this could simply be an invalid syntax thing.
The issue was that I was using the wrong attribute to specify the table name to be mapped in the objects. The attribute should be table='' so my hibernate objects should look like this:
Continent.cfc
component table='continents' persistent=true output=false{
}
Country.cfc
component table='countries' persistent=true output=false{
}