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á.