hibernatecoldfusionrailo

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

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.


Solution

  • 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{
    }