Alguem sabe com faço pra mapear minhas entidades no xml usnado hibernate anotation + spring?
Quem poder me ajudar!
Obrigado
Mapear entidades no xml usando Hibernate annotetaion + Spring (RESOLVIDO)
4 Respostas
Se tem annotations pra que usar mapeamento por xml? Sistema legado?
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!
Saquei!
Nesse caso não sei te ajudar, infelizmente não sei nada de Spring (to com EJB3 =D). =/
Abraços e boa sorte!
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.