tentei rodar o exemplo de hibernate do tutorial aki do GUJ…ele compilou certinho, mas qdo rodei o exemplo, ele executa normal, mas qdo vou no banco, nao tam nada gravado lah…
eh assim mesmo ou fiz algo de errado??
p/ cada tabela do banco, vou ter um arquivo hbm.xml, uma classe com get/set e uma classe DAO com os metodos de insert, update e delete??
outra coisa…onde devo colocar os arquivos properties com as configuracoes do banco, no caso WEB e desktop??
//coloque isso em um void main
Amigo a = new Amigo();
a.setNome("'Rafael");
//outros setXXX()...
AmigoDAO dao = new AmigoDAO();
dao.insert(a);
Rode isso em um debugger e, passo a passo, veja o que está acontecendo. Acabei de fazer um teste aqui com o Hibern8 1.2.5, e tudo correu bem (Win2kServer, J2SE 1.4.2, Hibern8 1.2.5, MySQL 3.23).
Daniel, nao sei se ajuda, mas aparece esses System no console…
Aug 27, 2003 9:37:48 AM cirrus.hibernate.impl.DatastoreImpl storeClass
INFO: Mapping resource: Amigo.hbm.xml
Aug 27, 2003 9:37:48 AM cirrus.hibernate.helpers.XMLHelper parseInputSource
INFO: Parsing XML: unknown system id
Aug 27, 2003 9:37:49 AM cirrus.hibernate.Environment <clinit>
INFO: Hibernate 1.2.5
Aug 27, 2003 9:37:49 AM cirrus.hibernate.Environment <clinit>
INFO: loaded properties from resource hibernate.properties
Aug 27, 2003 9:37:49 AM cirrus.hibernate.Environment <clinit>
INFO: JVM proxy support: true
Aug 27, 2003 9:37:49 AM cirrus.hibernate.impl.SessionFactoryImpl <init>
WARNING: No dialect set - using GenericDialect: The dialect was not set. Set the property hibernate.dialect.
Aug 27, 2003 9:37:49 AM cirrus.hibernate.sql.Dialect <init>
INFO: Using dialect: cirrus.hibernate.sql.GenericDialect
Aug 27, 2003 9:37:49 AM cirrus.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
Aug 27, 2003 9:37:49 AM cirrus.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using driver: oracle.jdbc.driver.OracleDriver at URL: jdbc:oracle:thin:@server:1521:MyDB
Aug 27, 2003 9:37:49 AM cirrus.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Connection properties: {user=scp, password=scp}
Aug 27, 2003 9:37:49 AM cirrus.hibernate.impl.SessionFactoryImpl <init>
INFO: Use outer join fetching: false
Aug 27, 2003 9:37:51 AM cirrus.hibernate.impl.SessionFactoryImpl <init>
INFO: Use scrollable result sets: true
Aug 27, 2003 9:37:51 AM cirrus.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: no JDNI name configured
Aug 27, 2003 9:37:51 AM cirrus.hibernate.impl.SessionFactoryImpl <init>
INFO: Query language substitutions: {}
Adicione estas linhas ao seu arquivo hibernate.properties:
hibernate.dialect cirrus.hibernate.sql.OracleDialect
#o resto da configuração para a conexão com o banco de dados
#...
hibernate.connection.pool_size 2
hibernate.statement_cache.size 100
MinhaClasse.hbm.xml fica no mesmo lugar que a MinhaClasse.class. É mais chato de gerar (não pra quem usa ant e XDoclet), mas mais fácil de encontrar com o class loader.
hibernate.properties e o xml de configuração devem ficar acessíveis no classpath. Isso quer dizer, no caso de uma app web, no WEB-INF/classes (blargh, nem acredito que eu to sugerindo isso).
Se vc vai fazer um JAR, (1) continua valendo, e (2) vira a raiz do JAR.
eu ia sugerir isto mesmo agora
trabalhar com o hibernate sem transação só funciona em SQL Server, Sybase e MySQL, qualquer outro banco de dados precisa criar uma transação e comitar ela para salvar os dados
mais uma coisa, caso de algum erro de inserção, feche a sua session e crie outra, por que se não o troço não funciona nunca mais
session é um session do hibernate, e o metodo reset, reinicializa a variavel session caso de algum problema de inserção para limpar a sugeira que o hibernate guarda mesmo depois de um rollback
/**
* Inicializa a sessção para o objeto atual
*
*/
private void init() {
try {
session = pmf.openSession();
} catch (HibernateException e) {
e.printStackTrace();
}
}
/**
* reinicializa a sessão depois de algum erro critico, isto evita erros posteriores do hibernate
*
*/
private synchronized void reset() {
try {
session.disconnect();
session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
session = null;
init();
}
manda o teu hibernate.properties e o log gerado pel aplicação por que ta feio o negocio, isto tinha que funcionar, tu ta fazendo alguma coisa de errado ai.