[RESOLVIDO]Problemas hibernate com firebird

7 respostas
natasha

Olá a todos,

em meu projeto eu estava usando o Mysql e estava funcionando sem problemas, resolvi mudar o mesmo projeto e acessar o banco firebird (não foi escolha minha), sendo que depois que mudei ele esta dando um erro que não consigo resolver

- Coloquei no lib e no classpath do projeto o drive jaybird
-O banco esta em um servido que vai ficar separado da aplicação.

<?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 >  
  
        <!-- local connection properties -->  
        <property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>  
        <property name="connection.url">jdbc:firebirdsql:172.17.1.21/databases/BANCOZETA.FDB</property>  
        <property name="connection.username">root3</property>  
        <property name="connection.password">lsecret45</property>  
        <property name="dialect">org.hibernate.dialect.FirebirdDialect</property>  
  
        <property name="hibernate.show_sql">true</property>  
        <property name="hibernate.hbm2ddl.auto">create</property>  
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
 		<property name="show_sql">true</property>
    </session-factory>      
</hibernate-configuration>

Essa classe é só para testar a conexão que não esta funcionando

import org.hibernate.Session;


import br.com.caelum.tarefas.modelo.Ctec_imoveis;
import br.com.caelum.hibernate.dao.Ctec_imoveisDAO;

public class TestaCtec_imoveisDAO {
	public static void main(String [] args){
		Session session = new HibernateUtil().getSession();
		Ctec_imoveisDAO ctec_imoveisDao = new Ctec_imoveisDAO(session);
		System.out.println("*****Listando Tudo*******");
		for (Ctec_imoveis p : ctec_imoveisDao.listaTudo()) {
		System.out.println(p.getI000());
		}
		System.out.println("*****Listando Paginado*******");
		for (Ctec_imoveis p : ctec_imoveisDao.pagina(2,3)) {
		System.out.println(p.getI000());
		}
		System.out.println("*****Preços maiores que*******");
		for (Ctec_imoveis p : ctec_imoveisDao.precoMaiorQue(2.10)) {
		System.out.println(p.getI000());
		}
	}
}
O erro:
Exception in thread "main" java.lang.ExceptionInInitializerError
	at br.com.caelum.hibernate.TestaCtec_imoveisDAO.main(TestaCtec_imoveisDAO.java:15)
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
	at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:107)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:142)
	at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
	at br.com.caelum.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:14)
	... 1 more

Por favor me ajudem, beijo a todos

7 Respostas

natasha
natasha:
Olá a todos,

em meu projeto eu estava usando o Mysql e estava funcionando sem problemas, resolvi mudar o mesmo projeto e acessar o banco firebird (não foi escolha minha), sendo que depois que mudei ele esta dando um erro que não consigo resolver

- Coloquei no lib e no classpath do projeto o drive jaybird
-O banco esta em um servido que vai ficar separado da aplicação.

<?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 >  
  
        <!-- local connection properties -->  
        <property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>  
        <property name="connection.url">jdbc:firebirdsql:172.17.1.21/databases/BANCOZETA.FDB</property>  
        <property name="connection.username">root3</property>  
        <property name="connection.password">lsecre45</property>  
        <property name="dialect">org.hibernate.dialect.FirebirdDialect</property>  
  
        <property name="hibernate.show_sql">true</property>  
        <property name="hibernate.hbm2ddl.auto">create</property>  
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
 		<property name="show_sql">true</property>
    </session-factory>      
</hibernate-configuration>

Essa classe é só para testar a conexão que não esta funcionando

import org.hibernate.Session;


import br.com.caelum.tarefas.modelo.Ctec_imoveis;
import br.com.caelum.hibernate.dao.Ctec_imoveisDAO;

public class TestaCtec_imoveisDAO {
	public static void main(String [] args){
		Session session = new HibernateUtil().getSession();
		Ctec_imoveisDAO ctec_imoveisDao = new Ctec_imoveisDAO(session);
		System.out.println("*****Listando Tudo*******");
		for (Ctec_imoveis p : ctec_imoveisDao.listaTudo()) {
		System.out.println(p.getI000());
		}
		System.out.println("*****Listando Paginado*******");
		for (Ctec_imoveis p : ctec_imoveisDao.pagina(2,3)) {
		System.out.println(p.getI000());
		}
		System.out.println("*****Preços maiores que*******");
		for (Ctec_imoveis p : ctec_imoveisDao.precoMaiorQue(2.10)) {
		System.out.println(p.getI000());
		}
	}
}
O erro:
Exception in thread "main" java.lang.ExceptionInInitializerError
	at br.com.caelum.hibernate.TestaCtec_imoveisDAO.main(TestaCtec_imoveisDAO.java:15)
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
	at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:107)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:142)
	at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
	at br.com.caelum.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:14)
	... 1 more

Por favor me ajudem, beijo a todos

romarcio

Faz um teste, troca seu arquivo hibernate.cfg.xml por um hibernate.properties.

Sempre que vejo problemas relacionados a hibernate.dialect, essa troca acaba resolvendo.

Não sei se é algum tipo de bug em alguma versão do hibernate, mas faz essa troca e depois diz se resolveu.

natasha

Olá obrigada pela resposta. :slight_smile:

coloquei o hibernate.properties e apaguei o hibernate.cfg.xml

o erro mudou, desconfio que é a URL como banco, estou fazendo do jeito certo?

hibernate.connection.url = jdbc:firebirdsql:172.17.1.21/databases/SIAPGEO.FDB

esse é o hibernate.properties

hibernate.dialect = org.hibernate.dialect.FirebirdDialect
hibernate.connection.driver_class = org.firebirdsql.jdbc.FBDriver
hibernate.connection.url = jdbc:firebirdsql:172.17.1.21/databases/BANCOZETA.FDB
hibernate.connection.username = root3
hibernate.connection.password = senha

agora o erro mudou

*****Listando Tudo******* Exception in thread "main" org.hibernate.exception.GenericJDBCException: Cannot open connection at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1596) at org.hibernate.loader.Loader.doQuery(Loader.java:717) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270) at org.hibernate.loader.Loader.doList(Loader.java:2294) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2172) at org.hibernate.loader.Loader.list(Loader.java:2167) at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1706) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347) at br.com.caelum.hibernate.dao.Ctec_imoveisDAO.listaTudo(Ctec_imoveisDAO.java:36) at br.com.caelum.hibernate.TestaCtec_imoveisDAO.main(TestaCtec_imoveisDAO.java:16) Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544472. Your user name and password are not defined. Ask your database administrator to set up a Firebird login. Reason: Your user name and password are not defined. Ask your database administrator to set up a Firebird login. at org.firebirdsql.jdbc.FBDataSource.getConnection(FBDataSource.java:122) at org.firebirdsql.jdbc.FBDriver.connect(FBDriver.java:131) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) ... 13 more

romarcio

Pelo erro, parece que o problema está no usuario e senha:

Reason: Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Estão corretos? Vc consegue acessar o seu banco pelo gerenciador do firebird com esse login e senha?

natasha

Obrigada :slight_smile:

Consigo, eu uso o ibexpert para acessar esse banco com esse login e senha, ele também esta falando da conexão, sera que não poderia ser no endereço do banco?

romarcio

Acho que fala da conexão pq vc não consegue logar.

Eu nunca trabalhei com firebird no java, mas achei essa string de conexão: "jdbc:firebirdsql://localhost:3050/d:\\dirtorio\\banco.FDB"

Tem a porta 3050 e o local onde o banco fica na máquina, tenta assim.

natasha

Eu nem acredito que funcionou, muito obrigada

fiz a conexão assim:

hibernate.connection.url = jdbc:firebirdsql://172.17.1.21:3050/databases//banco.FDB

Obrigada :slight_smile:

Criado 30 de setembro de 2010
Ultima resposta 30 de set. de 2010
Respostas 7
Participantes 2