Acabo de empezar a utilizar la Hibernación en un nuevo proyecto, y con mi primera entidad, obtuve un error, que me parece que no puede averiguar.

Mi esquema de la derecha ahora está a sólo dos tablas, continentes y países, donde el país tiene una continentid de clave externa.

Cuando intento ejecutar el código que llama a los continentes de la entidad, me sale una página en blanco. Todo el procesamiento se detiene, pero no se muestra ningún error. Cuando ejecuto el código a través de MXUnit, de hecho, me sale un error. El mensaje de error es simplemente Could Not Load an Entity: [continent#1]. La causa de la excepción es org.hibernate.exception.SQLGrammarException. Eso es todo lo que puedo.

Mi actual código de entidad es:

Continente.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;
    }
}

País.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;
    }
}

Y el código que llama al método. Es en 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'];}
}

No pude encontrar ninguna información realmente acerca de la mensaje de error que pude entender, por lo que este podría ser simplemente una sintaxis no válida cosa.

  • la única cosa que parece extraño para mí es «tipo de datos’. No la usé nunca y pensé que sólo hay 'ormtype' y 'sqltype'. Puedes intentar eliminar y hacer un ORMReload() y ver si funciona? También, mirar con cuidado en el seguimiento de la pila, a veces se puede ver algo útil ahí. Y de vez en ormsettings.logsql para comprobar si el SQL generado tiene sentido en absoluto.
InformationsquelleAutor Dave Long | 2011-05-31

5 Comentarios

  1. 4

    El problema era que yo estaba usando el mal atributo para especificar el nombre de la tabla que se asignan en los objetos. El atributo debe ser de tabla=» mi hibernación objetos debe tener este aspecto:

    Continente.cfc

    component table='continents' persistent=true output=false{
    }

    País.cfc

    component table='countries' persistent=true output=false{
    }
  2. 0

    ¿Qué hace su esquema de base de datos parece? He visto SQL Gramática execptions produce cuando los tipos de datos en los objetos no se alinean con los tipos de datos en su datamodel.

  3. 0

    ¿Cuál es tu motor de base de datos ?
    Podemos ver su orm aplicación config ?

    Personalmente nunca he visto a la propiedad 'datatype' y no lo he encontrado en la documentación.
    Te recomiendo usar 'sqlType' si desea forzar el tipo de datos. Normalmente lo uso con datetime :

    property name="creationDateTime" type="date" sqltype="datetime";

    Tengo que especificar sqltype="datetime" porque type="date" no es suficiente.

  4. 0

    Asegúrese de que la configuración ID se proporciona con el tipo de datos explícitamente.

    Por ejemplo, cambiar esta:

    <id name="id" column="ID"/>

    A este:

    <id name="id" column="ID" type="java.lang.Long"/>

Dejar respuesta

Please enter your comment!
Please enter your name here