Duvidas de Hibernate

fala galera…

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??

valew

1º deveria aparecer logo apos o flush do hibernate! (ou save)

2º o arquivo .xml pode conter todas os mapping de uma forma unica.

3º eu nao sei :lol:

3º no caso de desktop tem que ficar na raiz da sua aplicação, em WEB eu nao sei

Se não me engano é no web-inf que tem que ficar o hibernate.properties e os arquivos de mapeamento .hbm.xml dentro do diretório classes.

bom galera…valew pelas dicas…

mas ainda nao estah gravando no banco…meu codigo tah assim:

    public void insert(Amigo amigo) throws Exception
    {
        Session session = factory.openSession();
        session.save(amigo);
        session.flush();
        session.close();
    }

o save() tah antes do flush()…eh assim mesmo??
esse eh o exemplo do tutorial do GUJ…

falow

Qual o erro que o log do hibernate lhe devolve e qual a versão do hibernate usada?

entao Daniel…

nao aparece erro, mas os dados nao estao na tabela do banco tb…

to usando o hibernate 1.2.5

Ok… então vamos tentar o seguinte código:

    //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

Daniel, fiz o q vc disse, mas a tabela ainda estah vazia no banco…

o q mais pode ser??

Na minha (sessa vez humilde) opinião:

  1. 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.

  2. 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).

  3. Se vc vai fazer um JAR, (1) continua valendo, e (2) vira a raiz do JAR.

[]s!!

Existe isto?

Olá,
comigo estava acontecendo a mesma coisa, não gravando nada,
daí eu criei uma transação para inserir o Objeto e deu certo…

Olha o código aí, espero que dê certo…

falow

abraço


public void insert(Action action)
{		
	Session session = null;
	Transaction tx = null;
	try
	{
		session = factory.openSession();
		tx = session.beginTransaction();
		session.save(action);
		tx.commit();
		session.flush();			
	}
	catch (Exception e)
	{
		try
		{
			tx.rollback();
		}
		catch (HibernateException e1)
		{
			System.out.println("Error on execute rollback:" + e);
		}
		System.out.println("method insert:" + e);
	}
	finally
	{
		try
		{
			session.close();
		}
		catch (HibernateException e1)
		{
			System.out.println("method insert:" + e1);
		}
	}
	

}

eu ia sugerir isto mesmo agora :slight_smile:
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 :slight_smile:

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 :slight_smile:

valew pelas dicas, mas os dados ainda nao estao sendo gravados no banco…uso o Oracle 8i aki…

jah tentei de tudo, mas nada feito ainda…

Já tentou session.connection().commit(); ?

com certeza, não precisa disto :slight_smile:

aqui vai um metodo que utilizo em um objeto DAO em um projeto aqui,

[code] //Metodos de ajuda internos
private Object criarObjeto(Object objeto) {
Transaction t = null;
try {
t = session.beginTransaction();
session.save(objeto);
t.commit();
session.evict(objeto);
} catch (HibernateException e) {
if (t != null)
try {
t.rollback();
} catch (HibernateException e2) {
}
reset();
objeto = null;
}

	return objeto;
}

[/code]

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 :slight_smile:

/** * 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(); }

pmf é o SessionFactory previamente inicializado :slight_smile:

eh galera…
nada feito ainda com esse teste de Hibernate…

to quase deixando ele de lado…os dados nao ficam gravados!!!

valew pelas dicas…

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.