Hibernate Could Not Load an Entity Error
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
c开发者_C百科omponent {
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{
}
It may be the case that table structure is different from what is been mapped in java class.
What does your database schema look like? I've seen SQL Grammer execptions thrown when the datatypes in your objects don't align with the datatypes in your datamodel.
What's your DB engine ? Can we see your orm application config ?
Personally I have never seen the property 'datatype'
and I didn't find it in the documentation.
I recommend you to use 'sqlType'
if you want to force the data type. Typically I use it with datetime :
property name="creationDateTime" type="date" sqltype="datetime";
I have to specify sqltype="datetime"
because type="date"
is not enough.
Make sure that the configuration ID
is provided with the data type explicitly.
For example, change this:
<id name="id" column="ID"/>
To this:
<id name="id" column="ID" type="java.lang.Long"/>
精彩评论