Hibernate 3 com mola

Hibernate 3 com mola

1. Visão geral

Este artigo se concentrará na configuração deHibernate 3 with Spring - veremos como usar a configuração XML e Java para configurar o Spring com Hibernate 3 e MySQL.

Atualização: este artigo está focado no Hibernate 3. Se você estiver procurando pela versão atual do Hibernate -this is the article focused on it.

2. Java Configuração Spring para Hibernate 3

A instalação do Hibernate 3 com as configurações Spring e Java é simples:

import java.util.Properties;
import javax.sql.DataSource;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.orm.hibernate3.HibernateTransactionManager;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.google.common.base.Preconditions;

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({ "org.example.spring.persistence" })
public class PersistenceConfig {

   @Autowired
   private Environment env;

   @Bean
   public AnnotationSessionFactoryBean sessionFactory() {
      AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean();
      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(new String[] { "org.example.spring.persistence.model" });
      sessionFactory.setHibernateProperties(hibernateProperties());

      return sessionFactory;
   }

   @Bean
   public DataSource restDataSource() {
      BasicDataSource dataSource = new BasicDataSource();
      dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
      dataSource.setUrl(env.getProperty("jdbc.url"));
      dataSource.setUsername(env.getProperty("jdbc.user"));
      dataSource.setPassword(env.getProperty("jdbc.pass"));

      return dataSource;
   }

   @Bean
   @Autowired
   public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
      HibernateTransactionManager txManager = new HibernateTransactionManager();
      txManager.setSessionFactory(sessionFactory);

      return txManager;
   }

   @Bean
   public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
      return new PersistenceExceptionTranslationPostProcessor();
   }

   Properties hibernateProperties() {
      return new Properties() {
         {
            setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
            setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
         }
      };
   }
}

Comparado à configuração XML - descrita a seguir -, há uma pequena diferença na maneira como um bean na configuração acessa outro. Em XML, não há diferença entrepointing to a bean or pointing to a bean factory capable of creating that bean. Como a configuração do Java é segura para o tipo - apontar diretamente para a fábrica de beans não é mais uma opção - precisamos recuperar o bean da fábrica de beans manualmente:

txManager.setSessionFactory(sessionFactory().getObject());

3. Configuração XML Spring para Hibernate 3

Da mesma forma, podemos configurarHibernate 3 with XML config também:




    
    
    
        
            ${hibernate.hbm2ddl.auto}
            ${hibernate.dialect}
        
    



    
    
    
    



    


Em seguida, este arquivo XML é inicializado no contexto Spring usando uma classe@Configuration:

@Configuration
@EnableTransactionManagement
@ImportResource({ "classpath:persistenceConfig.xml" })
public class PersistenceXmlConfig {
   //
}

Para ambos os tipos de configuração, as propriedades específicas do JDBC e Hibernate são armazenadas em um arquivo de propriedades:

# jdbc.X
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate_dev?createDatabaseIfNotExist=true
jdbc.user=tutorialuser
jdbc.pass=tutorialmy5ql
# hibernate.X
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=create-drop

4. Spring, Hibernate e MySQL

O exemplo acima usa MySQL 5 como o banco de dados subjacente configurado com Hibernate - no entanto, o Hibernate suporta váriosSQL Databases básicos.

4.1. O motorista

O nome da classe do driver é configurado viathe jdbc.driverClassName property fornecido ao DataSource.

No exemplo acima, é definido comocom.mysql.jdbc.Driver a partir da dependênciamysql-connector-java que definimos no pom, no início do artigo.

4.2. O dialeto

O Dialeto é configurado viathe hibernate.dialect property fornecido ao HibernateSessionFactory.

No exemplo acima, isso é definido comoorg.hibernate.dialect.MySQL5Dialect, pois estamos usando o MySQL 5 como o banco de dados subjacente. Existem váriosother dialects supporting MySQL:

  • org.hibernate.dialect.MySQL5InnoDBDialect - para MySQL 5.x com o mecanismo de armazenamento InnoDB

  • org.hibernate.dialect.MySQLDialect - para MySQL anterior a 5.x

  • org.hibernate.dialect.MySQLInnoDBDialect - para MySQL anterior a 5.x com o mecanismo de armazenamento InnoDB

  • org.hibernate.dialect.MySQLMyISAMDialect - para todas as versões do MySQL com o mecanismo de armazenamento ISAM

Hibernatesupports SQL Dialects para cada banco de dados suportado.

5. Uso

Neste ponto, o Hibernate 3 está totalmente configurado com Spring e podemosinject the raw HibernateSessionFactory diretamente sempre que precisarmos:

public abstract class FooHibernateDAO{

   @Autowired
   SessionFactory sessionFactory;

   ...

   protected Session getCurrentSession(){
      return sessionFactory.getCurrentSession();
   }
}

6. Maven

Para adicionar as dependências de persistência do Spring ao pom, consulteSpring with Maven example - precisaremos definirspring-context espring-orm.

Continuando com o Hibernate 3, as dependências do Maven são simples:


   org.hibernate
   hibernate-core
   3.6.10.Final

Então, para permitir que o Hibernate use seu modelo de proxy, precisamos dejavassist também:


   org.javassist
   javassist
   3.18.2-GA

Usaremos o MySQL como nosso banco de dados para este tutorial, então também precisaremos:


   mysql
   mysql-connector-java
   5.1.32
   runtime

E, finalmente, não usaremos a implementação da fonte de dados Spring - oDriverManagerDataSource; em vez disso, usaremos uma solução de pool de conexão pronta para produção - Tomcat JDBC Connection Pool:


    org.apache.tomcat
    tomcat-dbcp
    7.0.55

7. Conclusão

Neste exemplo,we configured Hibernate 3 with Spring - ambos com configuração Java e XML. A implementação deste projeto simples pode ser encontrada emthe GitHub project - este é um projeto baseado em Maven, portanto, deve ser fácil de importar e executar como está.