Pessoal,
Já vi em vários outros lugares erros iguais ou semelhantes a este apontado por mim. Entretanto, venho pedir ajuda de vocês, pois não consegui sanar o meu problema especificamente.
Uso o Eclipse e o Hibernate 3.5.6 Final.
Seguem a saída do console (erro) e o código da (simples) aplicação:
CONSOLE:
5:02:25 INFO [Version ] Hibernate Annotations 3.5.6-Final
15:02:25 INFO [Environment ] Hibernate 3.5.6-Final
15:02:25 INFO [Environment ] hibernate.properties not found
15:02:25 INFO [Environment ] Bytecode provider name : javassist
15:02:25 INFO [Environment ] using JDK 1.4 java.sql.Timestamp handling
15:02:25 INFO [Version ] Hibernate Commons Annotations 3.2.0.Final
15:02:25 INFO [Configuration ] configuring from resource: /hibernate.cfg.xml
15:02:25 INFO [Configuration ] Configuration resource: /hibernate.cfg.xml
15:02:25 INFO [Configuration ] Configured SessionFactory: null
15:02:25 INFO [HibernateSearchEventListenerRegister] Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
15:02:25 INFO [AnnotationBinder ] Binding entity from annotated class: hello.Message
15:02:26 INFO [EntityBinder ] Bind entity hello.Message on table MESSAGES
15:02:26 INFO [AnnotationConfiguration] Hibernate Validator not found: ignoring
15:02:26 INFO [DriverManagerConnectionProvider] Using Hibernate built-in connection pool (not for production use!)
15:02:26 INFO [DriverManagerConnectionProvider] Hibernate connection pool size: 20
15:02:26 INFO [DriverManagerConnectionProvider] autocommit mode: false
15:02:26 INFO [DriverManagerConnectionProvider] using driver: org.hsqldb.jdbcDriver at URL: jdbc:hsqldb:hsql//localhost
15:02:26 INFO [DriverManagerConnectionProvider] connection properties: {user=sa, password=****}
15:02:26 INFO [SettingsFactory ] RDBMS: HSQL Database Engine, version: 1.8.1
15:02:26 INFO [SettingsFactory ] JDBC driver: HSQL Database Engine Driver, version: 1.8.1
15:02:26 INFO [Dialect ] Using dialect: org.hibernate.dialect.MySQLInnoDBDialect
15:02:26 INFO [JdbcSupportLoader ] Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
15:02:26 INFO [TransactionFactoryFactory] Using default transaction strategy (direct JDBC transactions)
15:02:26 INFO [TransactionManagerLookupFactory] No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
15:02:26 INFO [SettingsFactory ] Automatic flush during beforeCompletion(): disabled
15:02:26 INFO [SettingsFactory ] Automatic session close at end of transaction: disabled
15:02:26 INFO [SettingsFactory ] JDBC batch size: 15
15:02:26 INFO [SettingsFactory ] JDBC batch updates for versioned data: disabled
15:02:26 INFO [SettingsFactory ] Scrollable result sets: enabled
15:02:26 INFO [SettingsFactory ] JDBC3 getGeneratedKeys(): disabled
15:02:26 INFO [SettingsFactory ] Connection release mode: auto
15:02:26 INFO [SettingsFactory ] Maximum outer join fetch depth: 2
15:02:26 INFO [SettingsFactory ] Default batch fetch size: 1
15:02:26 INFO [SettingsFactory ] Generate SQL with comments: disabled
15:02:26 INFO [SettingsFactory ] Order SQL updates by primary key: disabled
15:02:26 INFO [SettingsFactory ] Order SQL inserts for batching: disabled
15:02:26 INFO [SettingsFactory ] Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
15:02:26 INFO [ASTQueryTranslatorFactory] Using ASTQueryTranslatorFactory
15:02:26 INFO [SettingsFactory ] Query language substitutions: {}
15:02:26 INFO [SettingsFactory ] JPA-QL strict compliance: disabled
15:02:26 INFO [SettingsFactory ] Second-level cache: enabled
15:02:26 INFO [SettingsFactory ] Query cache: disabled
15:02:26 INFO [SettingsFactory ] Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
15:02:26 INFO [SettingsFactory ] Optimize cache for minimal puts: disabled
15:02:26 INFO [SettingsFactory ] Structured second-level cache entries: disabled
15:02:26 INFO [SettingsFactory ] Echoing all SQL to stdout
15:02:26 INFO [SettingsFactory ] Statistics: disabled
15:02:26 INFO [SettingsFactory ] Deleted entity synthetic identifier rollback: disabled
15:02:26 INFO [SettingsFactory ] Default entity-mode: pojo
15:02:26 INFO [SettingsFactory ] Named query checking : enabled
15:02:26 INFO [SettingsFactory ] Check Nullability in Core (should be disabled when Bean Validation is on): enabled
15:02:27 INFO [SessionFactoryImpl ] building session factory
15:02:27 INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
Hibernate:
insert
into
MESSAGES
(NEXT_MESSAGE_ID, MESSAGE_TEXT)
values
(?, ?)
15:02:27 WARN [JDBCExceptionReporter] SQL Error: -22, SQLState: S0002
15:02:27 ERROR [JDBCExceptionReporter] Table not found in statement [insert into MESSAGES (NEXT_MESSAGE_ID, MESSAGE_TEXT) values (?, ?)]
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [hello.Message]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2329)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2836)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:267)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:705)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:693)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:689)
at hello.HelloWorld.main(HelloWorld.java:57)
Caused by: java.sql.SQLException: Table not found in statement [insert into MESSAGES (NEXT_MESSAGE_ID, MESSAGE_TEXT) values (?, ?)]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:116)
at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:54)
... 16 more
HIBERNATE.CFG.XML
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"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.connection.password"></property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.c3po.min_size">5</property>
<property name="hibernate.c3po.max_size">20</property>
<property name="hibernate.c3po.timeout">300</property>
<property name="hibernate.c3po.max_statements">50</property>
<property name="hibernate.c3po.idle_test_period">3000</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping class="hello.Message"/>
<mapping class="hello.HelloWorld"/>
<mapping class="hibernate.HibernateUtil"/>
</session-factory>
</hibernate-configuration>
PERSISTENCE.XML
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="HelloWorld">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
MESSAGE.JAVA
package hello;
import javax.persistence.*;
@Entity
@Table(name="MESSAGES")
public class Message {
@Id@GeneratedValue
@Column(name="MESSAGE_ID")
private Long id;
@Column(name="MESSAGE_TEXT")
private String text;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="NEXT_MESSAGE_ID")
private Message nextMessage;
public Message() {
}
public Message(String text) {
this.text = text;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Message getNextMessage() {
return nextMessage;
}
public void setNextMessage(Message nextMessage) {
this.nextMessage = nextMessage;
}
}
HIBERNATEUTIL.JAVA
package hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory(){
return new AnnotationConfiguration().configure().buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
HELLOWORLD.JAVA
package hello;
import hibernate.HibernateUtil;
import java.util.*;
import org.hibernate.Session;
public class HelloWorld {
/**
* @param args
*/
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
org.hibernate.Transaction tx = session.beginTransaction();
Message message = new Message("Hello World");
Long msgId = (Long) session.save(message);
try {
tx.commit();
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
session.close();
///NOVA SESSÃO
Session newSession = HibernateUtil.getSessionFactory().openSession();
org.hibernate.Transaction newTransaction = newSession.beginTransaction();
List<?> messages = newSession.createQuery("from Message m order by m.text asc").list();
System.out.println(messages.size() + "message(s) found:");
for(Iterator<?> iter = messages.iterator(); iter.hasNext();){
Message loadedMsg = (Message) iter.next();
System.out.println(loadedMsg.getText());
}
try {
newTransaction.commit();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
newSession.close();
HibernateUtil.getSessionFactory().close();
}
}
Pelo o que aponta o erro, não estou conseguindo sequer criar a tabela em meu BD (hsqldb)…Agora o porque disto e a sua consequente solução é que não sei!
Alguém, por gentileza, poderia me ajudar?
Grato!