[Resolvido]Fazendo conexões com varios BDs usando Hibernate

9 respostas
R

Fala galera!

Eu preciso usar o Hibernate para fazer conexão com vários bancos de dados.

Eu vi aqui no GUJ este tópico: Conexão dinamica com HIBERNATE [RESOLVIDO].

Ele me ajudou bastante, porém eu não consigo usar as minhas entidades, que são mapeadas por anotações.

Eu estou usando o seguinte comando no SessionFactory:

configuration.addClass(Produto.class);

Mas o erro que dá é que ele não consegue achar o arquivo: Produto.hbm.xml, mas eu nunca tive esse arquivo.

Obrigado.

9 Respostas

G

Não sei se vai ajudar mas, la no persistence.xml adicionar o parametro:

e apaga as classes mapeadas que você tem.

R

Obrigado pela resposta, mas infelizmente não funcionou. Ele ainda pede esse arquivo…

G

Eu nunca usei esse comando mas acho que se você declarar como automático não vai precisar dele.

R
Valeu pela ajuda, eu consegui fazer ele funcionar, vou postar o codigo do meu Criador de Session Factory.
AnnotationConfiguration configuration = new AnnotationConfiguration();
		
		configuration.setProperty("hibernate.connection.username", "root");
		configuration.setProperty("hibernate.connection.password", "");
		configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost/fj28");
		configuration.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
		configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
		configuration.setProperty("hibernate.hbm2ddl.auto", "update");
		configuration.setProperty("show_sql", "true");
		configuration.setProperty("format_sql", "true");
		configuration.setProperty("hibernate.archive.autodetection", "class, hbm");
		
		configuration.addAnnotatedClass(Produto.class);

		factory = configuration.buildSessionFactory();

Agora, sempre que eu precisar, basta mudar os valores das propriedades.

o erro acontecia por que eu estava usando o método
configuration.addClass(Produto.class);
e este método busca por um arquivo hbm.xml, já o método
configuration.addAnnotatedClass(Produto.class);
busca por uma classe anotada.

Valeu!

_

Olá Rafael.
Cara, sua dica me ajudo bastante. Só passando pra agradecer! Valeu por postar a resposta!

Abraço!

R

Ih cara, isso ai está tão antigo…

Essas são as configurações (Hibernate 4)

Configuration configuration = new Configuration();

		configuration.setProperty(AvailableSettings.USER,
				hibernateProperties.get("username"));
		configuration.setProperty(AvailableSettings.PASS,
				hibernateProperties.get("password"));
		configuration.setProperty(AvailableSettings.URL,
				hibernateProperties.get("url"));

		configuration.setProperty(AvailableSettings.DRIVER,
				"oracle.jdbc.driver.OracleDriver");
		configuration.setProperty(AvailableSettings.DIALECT,
				"org.hibernate.dialect.Oracle10gDialect");

		configuration.setProperty(AvailableSettings.HBM2DDL_AUTO, "validate");
		configuration.setProperty(AvailableSettings.SHOW_SQL, "false");
		configuration.setProperty(AvailableSettings.FORMAT_SQL, "false");

		configuration
				.setProperty(AvailableSettings.CONNECTION_PROVIDER,
						"org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider");
		configuration
				.setProperty(AvailableSettings.C3P0_ACQUIRE_INCREMENT, "2");
		configuration.setProperty(AvailableSettings.C3P0_TIMEOUT, "25200");
		configuration.setProperty(AvailableSettings.C3P0_MIN_SIZE, "1");
		configuration.setProperty(AvailableSettings.C3P0_MAX_SIZE, "10");
		configuration.setProperty(AvailableSettings.C3P0_MAX_STATEMENTS, "0");

		configuration.addAnnotatedClass(User.class);

		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
					.applySettings(configuration.getProperties())
					.buildServiceRegistry();

		this.sessionFactory = configuration
					.buildSessionFactory(serviceRegistry);
_

Oi Rafael.
Pow, legal mesmo. Eu tava usando o hibernate 3 aqui. Lendo o seu post eu vi que já tem o 4 e atualizei a minha lib. Refiz o meu método conforme a atualização que você postou acima. Porém eu to tento um erro que não to conseguindo resolver. Por acaso você sabe o motivo ?

Abaixo segue o meu método e o erro:

public static void bootMappingDataBase() {
		
	    Configuration configuration = new Configuration();
	      
	    configuration.setProperty(AvailableSettings.URL, "jdbc:mysql://" + SysProperties.DB_HOST + ":3306/pollo");  
	    configuration.setProperty(AvailableSettings.USER, SysProperties.DB_ID);
	    configuration.setProperty(AvailableSettings.PASS, SysProperties.DB_PW);  
	      
	    configuration.setProperty(AvailableSettings.DRIVER,"com.mysql.jdbc.Driver");  
	    configuration.setProperty(AvailableSettings.DIALECT,"org.hibernate.dialect.MySQL5InnoDBDialect");  
	      
	    configuration.setProperty(AvailableSettings.HBM2DDL_AUTO, "validate");  
	    configuration.setProperty(AvailableSettings.SHOW_SQL, "false");  
	    configuration.setProperty(AvailableSettings.FORMAT_SQL, "false");  
	      
	    configuration.setProperty(AvailableSettings.CONNECTION_PROVIDER, "org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider");  
	    configuration.setProperty(AvailableSettings.C3P0_ACQUIRE_INCREMENT, "2");  
	    configuration.setProperty(AvailableSettings.C3P0_TIMEOUT, "25200");  
	    configuration.setProperty(AvailableSettings.C3P0_MIN_SIZE, "1");  
	    configuration.setProperty(AvailableSettings.C3P0_MAX_SIZE, "500");
	    configuration.setProperty(AvailableSettings.C3P0_MAX_STATEMENTS, "0");  
	      
	    configuration.addAnnotatedClass(FinancialLaunch.class);
        configuration.addAnnotatedClass(Address.class);
        .
        .
        .
        configuration.addAnnotatedClass(Discipline.class);
	      
	    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();  
	    
	    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		session = sessionFactory.openSession();
	}

Erro:

log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.service.jdbc.connections.spi.ConnectionProvider]
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:186)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:150)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
	at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:223)
	at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:89)
	at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77)
	at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748)
	at com.lazulli.model.dao.DAOFactory.bootMappingDataBase(DAOFactory.java:239)
	at com.lazulli.view.MainWindow.presentation(MainWindow.java:570)
	at com.lazulli.view.MainWindow.<init>(MainWindow.java:124)
	at com.lazulli.Pollo.main(Pollo.java:21)
Caused by: org.hibernate.HibernateException: Could not instantiate connection provider [org.hibernate.engine.jdbc.internal.C3P0ConnectionProvider]
	at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:192)
	at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:114)
	at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:54)
	at org.hibernate.service.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:69)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:176)
	... 15 more
Caused by: org.hibernate.service.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.engine.jdbc.internal.C3P0ConnectionProvider]
	at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:141)
	at org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:189)
	... 19 more
Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.hibernate.engine.jdbc.internal.C3P0ConnectionProvider
	at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$1.findClass(ClassLoaderServiceImpl.java:99)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
	at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:138)
	... 20 more
R

Você precisa pegar o jar do c3p0 e colocar no seu projeto… Ele vem junto com o hibernate, olha lá nas pastas.

_

Aham, era bem isso. Eu estava suspeitando que estava faltando alguma coisa porque o não encontrava a classe C3P0ConnectionProvider. Então dando uma olhadela no site do hibernate eu descobri que o meu pacode de jars estava sem alguns jars. Baixei novamente e ajustei o path do projeto. Agora deu tudo certo. Talvez a primeira vez eu devo ter baixado os jars de algum site não muito recomendável.

Mas é isso ai! Valeu pela força Rafael!
Abraço!

Criado 23 de março de 2011
Ultima resposta 23 de jan. de 2013
Respostas 9
Participantes 3