Mapear entidades no xml usando Hibernate annotetaion + Spring (RESOLVIDO)

4 respostas
brucsantos

Alguem sabe com faço pra mapear minhas entidades no xml usnado hibernate anotation + spring?
Quem poder me ajudar!
Obrigado

4 Respostas

Tchello

Se tem annotations pra que usar mapeamento por xml? Sistema legado?

brucsantos

Então por algum motivo ele num encontra as entidades… não, não e um sistema legado!
Quando fiz testes apenas com hibernate com annotations, tive que colocar no xml de configuração do hibernate o mapping das entidades junto com os properties, ou então na minha classe onde instancio o SessionFactory posso usar o AnnotationConfiguration() seto as propriedades e add as entidades. mais, optei por fazer uma aplicação mais flexivel, no sentido de que se quiser mudar o banco não precisar abrir o codigoe recompilar, basta apenas mudar o xml.
E como uso o spring junto preciso do xml para fazer a integração entre os dois!

Tchello

Saquei!
Nesse caso não sei te ajudar, infelizmente não sei nada de Spring (to com EJB3 =D). =/

Abraços e boa sorte!

brucsantos

Bom pra quem tinha a mesma duvida que eu.... segue o codico com a solução

spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
		  "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
	<!--
		<bean id="hibernate3" name="hibernate"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
		scope="singleton"> <property name="hibernateProperties">
	-->

<beans>
	<bean name="sessionFactory"
		class="org.brisa.hibernatespringjsf.AnnotationOptimizedSessionFactoryBean"
		dependency-check="none">


		<!--
			Varios packages com sub-packages 
			<property name="basePackages">
			<list> <value>com.apolloti.Savior.domain.entity</value>
			<value>com.apolloti.RH.domain.entity</value>
			<value>com.apolloti.Finances.domain.entity</value> </list>
			</property>
		-->

		<!-- Ou apenas um Package com sub-packages -->
		<property name="basePackage">
			<value>org.brisa.hibernatespringjsf.domain.entity</value>
		</property>

		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
				<prop key="connection.driver_class">org.postgresql.Driver</prop>
				<prop key="hibernate.connection.url">jdbc:postgresql://10.1.4.49:5432/hibernate_teste</prop>
				<prop key="hibernate.connection.username">bcsantos</prop>
				<prop key="hibernate.connection.password">postgree</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="current_session_context_class">thread</prop>
				<prop key="hibernate.format_sql">true</prop>


				<!-- pool de conexões -->

				<prop key="hibernate.c3po.acquire_increment">1</prop>
				<prop key="hibernate.c3p0.min_size">5</prop>
				<prop key="hibernate.c3p0.max_size">50</prop>
				<prop key="hibernate.c3po.timeout">150</prop> <!-- em milisegundos -->
				<prop key="hibernate.c3po.max_statements">10</prop>
				<prop key="c3p0.idle.test_period">120</prop> <!-- Em segundos -->

			</props>
		</property>

	</bean>
</beans>

Implementação da classe org.brisa.hibernatespringjsf.AnnotationOptimizedSessionFactoryBean:

package org.brisa.hibernatespringjsf;


import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;

import javax.persistence.Entity;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
import org.springframework.util.ClassUtils;
/**
 * ###############################
 * @since 23/04/2008
 * @version 1.0
 * @category Infrastructure
 */
public class AnnotationOptimizedSessionFactoryBean extends AnnotationSessionFactoryBean {
	/*-------------------------------------------------------------------
	 *                       ATTRIBUTES
	 *-------------------------------------------------------------------*/
	private String[] basePackages;
	private ClassLoader beanClassLoader;

	/*-------------------------------------------------------------------
	 *                        BEHAVIORS
	 *-------------------------------------------------------------------*/
	@Override
	public void afterPropertiesSet() throws Exception 	{
		Collection<Class<?>> entities = new ArrayList<Class<?>>();
		ClassPathScanningCandidateComponentProvider scanner = this.createScanner();
		for (String basePackage : this.basePackages){
			this.findEntities(scanner, entities, basePackage);
		}
		this.setAnnotatedClasses(entities
				.toArray(new Class<?>[entities.size()]));
		this.setAnnotatedPackages(this.basePackages);
		super.afterPropertiesSet();
	}

	private ClassPathScanningCandidateComponentProvider createScanner() {
		
		ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
		scanner.addIncludeFilter(new AnnotationTypeFilter(Entity.class));
		return scanner;
	}

	private void findEntities(ClassPathScanningCandidateComponentProvider scanner, Collection<Class<?>> entities, String basePackage)
	{
		Set<BeanDefinition> annotatedClasses = scanner.findCandidateComponents(basePackage);

		for (BeanDefinition bd : annotatedClasses)
		{
			String className = bd.getBeanClassName();
			Class<?> type = ClassUtils.resolveClassName( className, this.beanClassLoader );
			entities.add( type );
		}
	}

	/*-------------------------------------------------------------------
	 *                       GET'S AND SET'S
	 *-------------------------------------------------------------------*/
	public void setBasePackage(String basePackage) {
		this.basePackages = new String[]{ basePackage };
	}
	public void setBasePackages(String[] basePackages) {
		
		this.basePackages = basePackages;
	}

	public void setBeanClassLoader(ClassLoader beanClassLoader) {
		this.beanClassLoader = beanClassLoader;
	}
}

Essa classe não foi eu quem criei.... encontrei em um outro forum mais não lembro o link!
Obrigado a todos.

Criado 20 de março de 2009
Ultima resposta 23 de mar. de 2009
Respostas 4
Participantes 2