Mapear Hibernate Annotations = Spring Annotations

Assuntos não relacionados ao Fórum.

Mapear Hibernate Annotations = Spring Annotations

Mensagempor janderson » Ter Ago 26, 2008 2:52 pm

é simples, quando tenho que mapear onde estão minhas classes onde estão minhas anotações com @Service no spring faço isso:

Código: Selecionar tudo
    <context:annotation-config/> 
        <context:component-scan   
            base-package="br.com.asm.business.service"></context:component-scan> 


quando vou mapear meu hibernate tenho que fazer assim:

Código: Selecionar tudo
   1. <mapping class="br.com.asm.business.entity.Bairro"/> 
   2.         <mapping class="br.com.asm.business.entity.Cidade"/> 
   3.         <mapping class="br.com.asm.business.entity.ContatosFornecedor"/> 
   4.         <mapping class="br.com.asm.business.entity.Estado"/> 
   5.         <mapping class="br.com.asm.business.entity.Departamento"/> 
   6.         <mapping class="br.com.asm.business.entity.Fornecedor"/> 
   7.         <mapping class="br.com.asm.business.entity.Produto"/> 
   8.         <mapping class="br.com.asm.business.entity.TabelaPreco"/> 
   9.         <mapping class="br.com.asm.business.entity.TipoProduto"/> 
  10.         <mapping class="br.com.asm.business.entity.UnidadeMedida"/> 
  11.         <mapping class="br.com.asm.business.entity.Usuario"/> 
  12.         <mapping class="br.com.asm.business.entity.PrecoProduto"/> 
  13.         <mapping class="br.com.asm.business.entity.PrecoProdutoPK"/> 
  14.         <mapping class="br.com.asm.business.entity.Estoque"/>                         
  15.         <mapping class="br.com.asm.business.entity.Compra"/> 
  16.         <mapping class="br.com.asm.business.entity.CompraProduto"/> 
  17.         <mapping class="br.com.asm.business.entity.CompraProdutoPK"/> 


isso porque mal comecei a fazer as classes, procurei e não achei uma forma de fazer com o hibernate igual faço com spring, dizer apenas o pacote, se o spring consegue provavelmente o hibernate tbm pode... ou poderia com força de vontade

Alguém tem uma noção de como fazer esse mapeamento no hibernate simples como é feito no spring, para que a cada classe não tenha que ir lá no arquivo do hibernate.cfd.xml ou no applicationcontext.xml (tanto faz) e colocar na mão?

coloquei esse tópico no guj mais ninguém soube me responder se tinha, resolvi perguntar aqui tbm \":D\" ....

vlw
Janderson Fernandes Cardoso
meu blog: http://saberprogramar.com/blog/
Avatar de usuário
janderson
Flex Debugger
 
Mensagens: 115
Data de registro: Ter Jan 22, 2008 10:51 pm

Re: Mapear Hibernate Annotations = Spring Annotations

Mensagempor Kinja » Ter Ago 26, 2008 5:53 pm

Então cara,

como você está usando Spring, vc pode colocar um a um com está sendo feito, ou também usar o mappingDirectoryLocations para apontar para um diretório, ou também pode usar mappingJarLocations para mapear dentro de um .jar

abraços \";)\"
Leandro Quingerski

http://www.apollo-ti.com
Java | Flex | PHP
Avatar de usuário
Kinja
Flex Child
 
Mensagens: 200
Data de registro: Ter Jan 15, 2008 11:16 am

Re: Mapear Hibernate Annotations = Spring Annotations

Mensagempor janderson » Ter Ago 26, 2008 10:22 pm

Fala Leandro, tudo blz!!! tenho visto sua colaboração aqui no forum, parabens!!!

é o seguinte, o "mappingDirectoryLocations" serve quando mapeamos os arquivos do hibernate em xml, quando usamos hibernate annotation não funciona, pelo menos tentei e não consegui, sobre o mappingJarLocations já não sei como funciona, vou dar uma pesquisada, obrigado
Janderson Fernandes Cardoso
meu blog: http://saberprogramar.com/blog/
Avatar de usuário
janderson
Flex Debugger
 
Mensagens: 115
Data de registro: Ter Jan 22, 2008 10:51 pm

Re: Mapear Hibernate Annotations = Spring Annotations

Mensagempor Kinja » Qua Ago 27, 2008 6:27 pm

janderson escreveu:Fala Leandro, tudo blz!!! tenho visto sua colaboração aqui no forum, parabens!!!

é o seguinte, o "mappingDirectoryLocations" serve quando mapeamos os arquivos do hibernate em xml, quando usamos hibernate annotation não funciona, pelo menos tentei e não consegui, sobre o mappingJarLocations já não sei como funciona, vou dar uma pesquisada, obrigado


Ou valeu cara!
Na verdade fui um dos primeiros a entrar no forum, mas agora que estou participando efitivamente... vlw \";)\"

Eu não tinha me tocado que era com Annotations (talvez se eu olhasse o nome do tópico).
Fui dar uma procurada a respeito e achei um tópico no guj, que inclusive era teu, e inclusive o cara deu a mesma resposta que eu! \":lol:\"

acabou que não achei nenhuma forma de referenciar o pacote, acho que vai ter que ser mapeando uma a uma mesmo eim. Se descobrir algo, avisa !

abraços
Leandro Quingerski

http://www.apollo-ti.com
Java | Flex | PHP
Avatar de usuário
Kinja
Flex Child
 
Mensagens: 200
Data de registro: Ter Jan 15, 2008 11:16 am

Re: Mapear Hibernate Annotations = Spring Annotations

Mensagempor digows » Qui Ago 28, 2008 1:05 am

Olá,

Como você não está usando JPA/EntityManager, nativamente não é possível pelo support do Spring fazer o load das Classes anotadas.
Mas, segue abaixo uma classe que faz isso:

Código: Selecionar tudo
package com.apolloti.framework.hibernate;

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;
   }
   
   @Override
   public void setBeanClassLoader(ClassLoader beanClassLoader)
   {
      this.beanClassLoader = beanClassLoader;
   }
}


Para usar:
Código: Selecionar tudo
   <bean id="sessionFactory" class="com.apolloti.framework.hibernate.AnnotationOptimizedSessionFactoryBean"
      dependency-check="none">
      <property name="dataSource">
         <ref local="dataSource" />
      </property>
               
                //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>com.apolloti.Savior.domain.entity</value>
      </property>

         <property name="hibernateProperties">
                ....
      </property>
   </bean>


Abraços,
Avatar de usuário
digows
Custom Components
 
Mensagens: 590
Data de registro: Ter Jan 15, 2008 12:18 am
Localização: Foz do Iguaçu - PR

Re: Mapear Hibernate Annotations = Spring Annotations

Mensagempor Kinja » Qui Ago 28, 2008 1:15 am

Ow Digows,

Então essa é a danada que vc tinha me falado..

Boa ! vlw \";)\"
Leandro Quingerski

http://www.apollo-ti.com
Java | Flex | PHP
Avatar de usuário
Kinja
Flex Child
 
Mensagens: 200
Data de registro: Ter Jan 15, 2008 11:16 am

Re: Mapear Hibernate Annotations = Spring Annotations

Mensagempor janderson » Qui Ago 28, 2008 10:58 am

Vcs são um gênio \":)\" show de bola, vou testar agora mesmo... obrigado
Janderson Fernandes Cardoso
meu blog: http://saberprogramar.com/blog/
Avatar de usuário
janderson
Flex Debugger
 
Mensagens: 115
Data de registro: Ter Jan 22, 2008 10:51 pm

Re: Mapear Hibernate Annotations = Spring Annotations

Mensagempor janderson » Ter Set 02, 2008 1:33 pm

só para não passar em branco, aeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

funcionou, show de bola, muito obrigado, vai saber assim lá na china! putsss \":D\"

vlw obrigado mais uma vez
Janderson Fernandes Cardoso
meu blog: http://saberprogramar.com/blog/
Avatar de usuário
janderson
Flex Debugger
 
Mensagens: 115
Data de registro: Ter Jan 22, 2008 10:51 pm


Retornar para Off-Topic

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante