Spring+hibernate+JPA構成
最近hibernateのJPA実装に興味があり,ここでは構成方法を記録し,検討する.
まずmaven依存パッケージの構成を行い、ここではspring 3を使用します.1.2とhibernate 3.6.0
次にspring構成アプリケーションContext.xmlは、ここでデータソースがJNDIであることに注意してください.本番環境ではpropertiesファイルを使用することをお勧めしません.実施者に提供されるコードは様々なwarパッケージなので、他の人はあなたのwarパッケージを剥いてpropertiesを修正することはできません.ミドルウェアのデータソース構成を直接変更します.他の構成、例えばパスなどは、頻繁に変更される構成ファイルをプロジェクトに置かないで、コンテナに渡して構成することが望ましい.
最後にJPA配置クラスパスの下META-INF/persistence.xml、複数のデータベース方言、複数のユニットを構成してください!
JAVA beanにJPAのEntityManagerオブジェクトを注入し、DAOを例にとるとspringでJPAを正しく統合できます
最後に、個人的な理解を述べると、JPAはhibernate独自のセッションファクトリーよりもORM開発に有利である.最近見ているGraniteDSではJPAを使ったORMがおすすめです.果たして良いかどうかは、後続の蓄積で検証される必要がある.
ORMの目的は主に一つで、コードの簡潔さと柔軟性です.現在、会社ではspringのjdbcTemplateを使用していますが、SQL文を自分で管理したり、CRUD操作をしたり、オブジェクトや集合を生成したりするのは比較的煩雑です.また、工事量が大きくなると、SQL文のメンテナンスが面倒になります.hibernateとかより早く来たほうがいいです.
まずmaven依存パッケージの構成を行い、ここではspring 3を使用します.1.2とhibernate 3.6.0
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.0.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
</dependencies>
次にspring構成アプリケーションContext.xmlは、ここでデータソースがJNDIであることに注意してください.本番環境ではpropertiesファイルを使用することをお勧めしません.実施者に提供されるコードは様々なwarパッケージなので、他の人はあなたのwarパッケージを剥いてpropertiesを修正することはできません.ミドルウェアのデータソース構成を直接変更します.他の構成、例えばパスなどは、頻繁に変更される構成ファイルをプロジェクトに置かないで、コンテナに渡して構成することが望ましい.
<jee:jndi-lookup id="mssql" jndi-name="jdbc/test" />
<bean id="emf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="mssql"></property>
<property name="persistenceUnitName" value="sample"></property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emf" />
</bean>
<mvc:annotation-driven />
<tx:annotation-driven />
最後にJPA配置クラスパスの下META-INF/persistence.xml、複数のデータベース方言、複数のユニットを構成してください!
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="sample" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect"
value="org.hibernatespatial.sqlserver.SQLServerSpatialDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
JAVA beanにJPAのEntityManagerオブジェクトを注入し、DAOを例にとるとspringでJPAを正しく統合できます
@Transactional
public abstract class BaseDao<T> implements IBaseDao<T> {
@PersistenceContext
protected EntityManager em;
...
}
最後に、個人的な理解を述べると、JPAはhibernate独自のセッションファクトリーよりもORM開発に有利である.最近見ているGraniteDSではJPAを使ったORMがおすすめです.果たして良いかどうかは、後続の蓄積で検証される必要がある.
ORMの目的は主に一つで、コードの簡潔さと柔軟性です.現在、会社ではspringのjdbcTemplateを使用していますが、SQL文を自分で管理したり、CRUD操作をしたり、オブジェクトや集合を生成したりするのは比較的煩雑です.また、工事量が大きくなると、SQL文のメンテナンスが面倒になります.hibernateとかより早く来たほうがいいです.