[RESOLVIDO]Problemas hibernate com firebird

7 respostas
N

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

N
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

R

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.

N

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

R

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?

N

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?

R

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.

N

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