Hibernate 3 dengan Spring

1. Ikhtisar

Artikel ini akan fokus pada pengaturan Hibernate 3 dengan Spring - kita akan melihat bagaimana menggunakan konfigurasi XML dan Java untuk mengatur Spring dengan Hibernate 3 dan MySQL.

Pembaruan: artikel ini difokuskan pada Hibernate 3. Jika Anda mencari versi Hibernate saat ini - ini adalah artikel yang berfokus padanya.

2. Konfigurasi Spring Java untuk Hibernate 3

Menyiapkan Hibernate 3 dengan konfigurasi Spring dan Java sangat mudah:

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({ "com.baeldung.spring.persistence" }) public class PersistenceConfig { @Autowired private Environment env; @Bean public AnnotationSessionFactoryBean sessionFactory() { AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean(); sessionFactory.setDataSource(restDataSource()); sessionFactory.setPackagesToScan(new String[] { "com.baeldung.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")); } }; } }

Dibandingkan dengan Konfigurasi XML - dijelaskan selanjutnya - ada sedikit perbedaan dalam cara satu kacang dalam konfigurasi mengakses kacang lainnya. Dalam XML tidak ada perbedaan antara menunjuk ke kacang atau menunjuk ke pabrik kacang yang mampu membuat kacang itu . Karena konfigurasi Java adalah type-safe - menunjuk langsung ke pabrik kacang tidak lagi menjadi pilihan - kita perlu mengambil kacang dari pabrik kacang secara manual:

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

3. Konfigurasi Pegas XML untuk Hibernate 3

Demikian pula, kita dapat mengatur Hibernate 3 dengan konfigurasi XML juga:

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

Kemudian, file XML ini di-bootstrap ke dalam konteks Spring menggunakan kelas @Configuration :

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

Untuk kedua jenis konfigurasi, properti khusus JDBC dan Hibernate disimpan di file properti:

# 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 dan MySQL

Contoh di atas menggunakan MySQL 5 sebagai database dasar yang dikonfigurasi dengan Hibernate - namun, Hibernate mendukung beberapa Database SQL yang mendasarinya.

4.1. Supir

Nama kelas driver dikonfigurasi melalui para jdbc.driverClassName properti yang diberikan kepada DataSource.

Pada contoh di atas, ini disetel ke com.mysql.jdbc.Driver dari dependensi mysql-connector-java yang kami tentukan di pom, di awal artikel.

4.2. Dialek

Dialek dikonfigurasi melalui para hibernate.dialect properti yang diberikan kepada Hibernate SessionFactory .

Dalam contoh di atas, ini disetel ke org.hibernate.dialect.MySQL5Dialect karena kami menggunakan MySQL 5 sebagai Database yang mendasarinya. Ada beberapa dialek lain yang mendukung MySQL :

  • org.hibernate.dialect.MySQL5InnoDBDialect - untuk MySQL 5.x dengan mesin penyimpanan InnoDB
  • org.hibernate.dialect.MySQLDialect - untuk MySQL sebelum 5.x
  • org.hibernate.dialect.MySQLInnoDBDialect - untuk MySQL sebelum 5.x dengan mesin penyimpanan InnoDB
  • org.hibernate.dialect.MySQLMyISAMDialect - untuk semua versi MySQL dengan mesin penyimpanan ISAM

Hibernate mendukung Dialek SQL untuk setiap Database yang didukung.

5. Penggunaan

Pada titik ini, Hibernate 3 sepenuhnya dikonfigurasi dengan Spring dan kita dapat menyuntikkan Hibernate SessionFactory mentah secara langsung kapan pun kita perlu:

public abstract class FooHibernateDAO{ @Autowired SessionFactory sessionFactory; ... protected Session getCurrentSession(){ return sessionFactory.getCurrentSession(); } }

6. Maven

Untuk menambahkan dependensi Spring Persistence ke pom, silakan lihat contoh Spring with Maven - kita perlu mendefinisikan konteks pegas dan pegas-orm .

Melanjutkan ke Hibernate 3, dependensi Maven sederhana:

 org.hibernate hibernate-core 3.6.10.Final 

Kemudian, untuk mengaktifkan Hibernate untuk menggunakan model proxy-nya, kita juga membutuhkan javassist :

 org.javassist javassist 3.18.2-GA 

Kami akan menggunakan MySQL sebagai DB kami untuk tutorial ini, jadi kami juga membutuhkan:

 mysql mysql-connector-java 5.1.32 runtime 

Dan terakhir, kita tidak akan menggunakan implementasi sumber data Spring - DriverManagerDataSource ; sebagai gantinya, kami akan menggunakan solusi kumpulan koneksi siap produksi - Tomcat JDBC Connection Pool:

 org.apache.tomcat tomcat-dbcp 7.0.55 

7. Kesimpulan

Dalam contoh ini, kami mengonfigurasi Hibernate 3 dengan Spring - keduanya dengan konfigurasi Java dan XML. Implementasi proyek sederhana ini dapat ditemukan di proyek GitHub - ini adalah proyek berbasis Maven, jadi semestinya mudah untuk mengimpor dan menjalankannya apa adanya.