Duvidas de Hibernate

22 respostas
R

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

22 Respostas

maxguzenski

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:

Jair_Rillo_Junior

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

luiz_ross

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.

R

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

Daniel_Quirino_Olive

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

R

entao Daniel…

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

to usando o hibernate 1.2.5

Daniel_Quirino_Olive

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

R

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: {}
Daniel_Quirino_Olive

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
R

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

o q mais pode ser??

dukejeffrie

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

K

Existe isto?

tads

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);
		}
	}
	

}
urubatan

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:

R

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…

Umlauf

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

urubatan

com certeza, não precisa disto :-)

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

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

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

pmf é o SessionFactory previamente inicializado :-)

R

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

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

valew pelas dicas…

urubatan

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.

R

bom, ai vai o hibernate.properties…

hibernate.dialect cirrus.hibernate.sql.OracleDialect
hibernate.connection.driver_class = oracle.jdbc.driver.OracleDriver
hibernate.connection.url = jdbc:oracle:thin:@SERVER:1521:MyDB
hibernate.connection.username = user
hibernate.connection.password = pass
hibernate.connection.pool_size 2
hibernate.statement_cache.size 100

e o log gerado…

===== Teste do Hibernate =======
Sep 2, 2003 10:46:47 AM cirrus.hibernate.impl.DatastoreImpl storeClass
INFO: Mapping resource: Amigo.hbm.xml
Sep 2, 2003 10:46:47 AM cirrus.hibernate.helpers.XMLHelper parseInputSource
INFO: Parsing XML: unknown system id
Sep 2, 2003 10:46:49 AM cirrus.hibernate.Environment <clinit>
INFO: Hibernate 1.2.5
Sep 2, 2003 10:46:49 AM cirrus.hibernate.Environment <clinit>
INFO: loaded properties from resource hibernate.properties
Sep 2, 2003 10:46:49 AM cirrus.hibernate.Environment <clinit>
INFO: JVM proxy support: true
Sep 2, 2003 10:46:49 AM cirrus.hibernate.sql.Dialect <init>
INFO: Using dialect: cirrus.hibernate.sql.OracleDialect
Sep 2, 2003 10:46:49 AM cirrus.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 2
Sep 2, 2003 10:46:49 AM cirrus.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using driver: oracle.jdbc.driver.OracleDriver at URL: jdbc:oracle:thin:@Server:1521:SCP
Sep 2, 2003 10:46:49 AM cirrus.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Connection properties: {user=***, password=***}
Sep 2, 2003 10:46:49 AM cirrus.hibernate.ps.PreparedStatementCache <init>
INFO: prepared statement cache size: 100
Sep 2, 2003 10:46:49 AM cirrus.hibernate.impl.SessionFactoryImpl <init>
INFO: Use outer join fetching: true
Sep 2, 2003 10:46:51 AM cirrus.hibernate.impl.SessionFactoryImpl <init>
INFO: Use scrollable result sets: true
Sep 2, 2003 10:46:51 AM cirrus.hibernate.impl.SessionFactoryImpl <init>
INFO: JDBC 2 max batch size: 15
Sep 2, 2003 10:46:51 AM cirrus.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: no JDNI name configured
Sep 2, 2003 10:46:51 AM cirrus.hibernate.impl.SessionFactoryImpl <init>
INFO: Query language substitutions: {}
urubatan

tu ta sando o hibernate 1 ainda :frowning:
só mexi com o 2 até hoje :slight_smile:

mas mesmo assim, deveria funcionar :slight_smile:

Daniel_Quirino_Olive

Tente rodar o aplicativo em um debugger e veja se não é lançada alguma exceção que talvez você não esteja tratando devidamente.

Criado 26 de agosto de 2003
Ultima resposta 2 de set. de 2003
Respostas 22
Participantes 10