He seguido avanzando, y por lo que veo no me encuentra una tabla, o no puede obtener el valor inicial para el generador, y no encuentro nada en San Google. Aquí están mis archivos:
hibernate.cfg.xml
Código:
<!DOCTYPE hibernate-configuration SYSTEM
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">
org.hsqldb.jdbcDriver
</property>
<property name="hibernate.connection.url">
jdbc:hsqldb:hsql://localhost
</property>
<property name="hibernate.connection.username">
sa
</property>
<property name="hibernate.dialet">
org.hibernate.dialect.HSQLDialect
</property>
<!-- Usando la conexión de c3p0 -->
<!-- Valor mínimo de conexiones JDBC que C3PO puede mantener -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- Valor máximo de conexiones que el pool puede mantener, si se pasa, lanzará una excepcion -->
<property name="hibernate.c3p0.max_size">20</property>
<!-- Periodo de tiempo después del cual la conexión será borrada -->
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_text_period">3000</property>
<!-- Para mostrar e imprimir SQL y stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- lista de mapeo de documentos xml -->
<mapping resource="hello/Message.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Message.hbm.xml
Código:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Este documento xml le dice a hibernate que establezca una relación de
persistencia entre la clase Message y la tabla MESSAGES, relacionando cada
campo, y generando el esquema de la bbdd -->
<hibernate-mapping>
<class name="hello.Message" table="MESSAGES" >
<!-- Para que no dé error al crear la etiqueta class, debe tener al menos
el parámetro id dentro de ella-->
<id name="id" column="MESSAGE_ID">
<generator class="increment" />
</id>
<property name="text" column="MESSAGE_TEXT"/>
<many-to-one name="nextMessage" cascade="all"
column="NEXT_MESSAGE-ID" foreign-key="FK_NEXT_MESSAGE"/>
</class>
</hibernate-mapping>
y build.xml
Código:
<project name="HelloWorldJP" default="compile" basedir=".">
<!-- Nombre y versión del proyecto-->
<property name="proj.name" value="HelloWorldJP"/>
<property name="proj.version" value="1.0"/>
<!-- Propiedades globales para este constructor -->
<property name="src.java.dir" value="src"/>
<property name="lib.dir" value="lib"/>
<property name="build.dir" value="bin"/>
<!-- Declaración del classpath -->
<path id="project.classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
<include name="**/*.zip"/>
</fileset>
</path>
<!-- Accesos directos útiles -->
<patternset id="meta.files">
<include name="**/*.xml"/>
<include name="**/*.properties"/>
</patternset>
<!-- Limpieza -->
<target name="clean">
<delete dir="${build.dir}"/>
<mkdir dir="${build.dir}"/>
</target>
<!-- Compilar las fuentes de java -->
<target name="compile" depends="clean">
<mkdir dir="${build.dir}"/>
<javac srcdir="${src.java.dir}" destdir="${build.dir}" nowarn="on">
<classpath refid="project.classpath"/>
</javac>
</target>
<!-- Copia de metadatos para construir el classpath -->
<target name="copymetafiles">
<copy todir="${build.dir}">
<fileset dir="${src.java.dir}">
<patternset refid="meta.files"/>
</fileset>
</copy>
</target>
<!-- Ejecutando HelloWorldJP -->
<target name="run" depends="compile, copymetafiles"
description="Build and run HelloWorldJP">
<java fork="true" classname="hello.HelloWorld"
classpathref="project.classpath">
<classpath path="${build.dir}"/>
</java>
</target>
<!-- Schema Export -->
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="project.classpath"/>
<target name="schemaexport" depends="compile, copymetafiles"
description="Exports a generated schema to DB and file">
<hibernatetool destdir="${basedir}">
<classpath path="${build.dir}"/>
<configuration configurationfile = "${build.dir}/hibernate.cfg.xml"/>
<!-- El exportador es hbm2ddl. Si drop=true, las declaraciones drop de sql son generadas primero y todas las tablas y ctes que
existan seran borradas antes de eso. Si create=true, las declaraciones sql son creadas después, creando
todas las tablas y ctes. Si export=true, todas las declaraciones ddl son directamente ejecutadas en bbdd,
abriendo una conexion con la bbdd encontrada en el fichero de configuracion-->
<hbm2ddl drop="true" create="true" export="true"
outputfilename="helloworld-ddl.sql" delimiter=";" format="true"/>
</hibernatetool>
</target>
<target name="dbmanager" description="Start HSQLDB manager">
<java classname="org.hsqldb.util.DatabaseManagerSwing"
fork="yes" classpathref="project.classpath" failonerror="true">
<arg value="-url"/>
<arg value="jdbc:hsqldb:hsql://localhost/"/>
<arg value="-driver"/>
<arg value="org.hsqldb.jdbcDriver"/>
</java>
</target>
</project>
que creo son los más importantes. Y éste es el error:
...
[java] 09-mar-2010 9:47:51 org.hibernate.stat.StatisticsImpl logSummary
[java] INFO: query cache misses: 0
[java] 09-mar-2010 9:47:51 org.hibernate.stat.StatisticsImpl logSummary
[java] INFO: max query time: 0ms
[java] Hibernate:
[java] select
[java] max(MESSAGE_ID)
[java] from
[java] MESSAGES
[java] 09-mar-2010 9:47:52 org.hibernate.util.JDBCExceptionReporter logExceptions
[java] ADVERTENCIA: SQL Error: -22, SQLState: S0002
[java] 09-mar-2010 9:47:52 org.hibernate.util.JDBCExceptionReporter logExceptions
[java] GRAVE: Table not found in statement [select max(MESSAGE_ID) from MESSAGES]
[java] Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not fetch initial value for increment generator
[java] at org.hibernate.exception.SQLStateConverter.convert( SQLStateConverter.java:90)
[java] at org.hibernate.exception.JDBCExceptionHelper.conver t(JDBCExceptionHelper.java:66)
[java] at org.hibernate.id.IncrementGenerator.getNext(Increm entGenerator.java:131)
[java] at org.hibernate.id.IncrementGenerator.generate(Incre mentGenerator.java:6
[java] at org.hibernate.event.def.AbstractSaveEventListener. saveWithGeneratedId(AbstractSaveEventListener.java :122)
[java] at org.hibernate.event.def.DefaultSaveOrUpdateEventLi stener.saveWithGeneratedOrRequestedId(DefaultSaveO rUpdateEventListener.java:210)
[java] at org.hibernate.event.def.DefaultSaveEventListener.s aveWithGeneratedOrRequestedId(DefaultSaveEventList ener.java:56)
[java] at org.hibernate.event.def.DefaultSaveOrUpdateEventLi stener.entityIsTransient(DefaultSaveOrUpdateEventL istener.java:195)
[java] at org.hibernate.event.def.DefaultSaveEventListener.p erformSaveOrUpdate(DefaultSaveEventListener.java:5 0)
[java] at org.hibernate.event.def.DefaultSaveOrUpdateEventLi stener.onSaveOrUpdate(DefaultSaveOrUpdateEventList ener.java:93)
[java] at org.hibernate.impl.SessionImpl.fireSave(SessionImp l.java:563)
[java] at org.hibernate.impl.SessionImpl.save(SessionImpl.ja va:551)
[java] at org.hibernate.impl.SessionImpl.save(SessionImpl.ja va:547)
[java] at hello.HelloWorld.main(Unknown Source)
[java] Caused by: java.sql.SQLException: Table not found in statement [select max(MESSAGE_ID) from MESSAGES]
[java] at org.hsqldb.jdbc.Util.throwError(Unknown Source)
[java] at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unkno wn Source)
[java] at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Un known Source)
[java] at org.hibernate.jdbc.AbstractBatcher.getPreparedStat ement(AbstractBatcher.java:534)
[java] at org.hibernate.jdbc.AbstractBatcher.prepareSelectSt atement(AbstractBatcher.java:145)
[java] at org.hibernate.id.IncrementGenerator.getNext(Increm entGenerator.java:107)
[java] ... 11 more
[java] Java Result: 1
BUILD SUCCESSFUL
Total time: 3 seconds
Si alguien puede echarme un cable, lo agradecería mucho. Un saludo