我是JPA,Hibernate以及Spring的新手。目前,我正在創建一個與大量表格一起使用的數據庫的spring web服務。要訪問這些表格,我創建了單獨的課程註釋@Entity
。然後我創建了一個通用的DAO類,因爲我所有的實體都需要類似的操作。Spring JPA Hibernate處理大型數據庫
@Transactional
public class GenericJpaDao<T, ID extends Serializable> {
private Class<T> persistentClass;
private EntityManager entityManager;
public GenericJpaDao(Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
protected EntityManager getEntityManager() {
return entityManager;
}
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public Class<T> getPersistentClass() {
return persistentClass;
}
@Transactional(readOnly = true)
public T findById(ID id) {
T entity = (T) getEntityManager().find(getPersistentClass(), id);
return entity;
}
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public List<T> findAll() {
return getEntityManager().createQuery("select x from " + getPersistentClass().getSimpleName() + " x").getResultList();
}
public T save(T entity) {
getEntityManager().persist(entity);
return entity;
}
public T update(T entity) {
T mergedEntity = getEntityManager().merge(entity);
return mergedEntity;
}
public void delete(T entity) {
entity = getEntityManager().merge(entity);
getEntityManager().remove(entity);
}
public void flush() {
getEntityManager().flush();
}
}
現在我試圖與相關Entitiy類實例化這個GenericJpaDao
代碼爲persistentClass
。但後來,因爲我通過datasource-config.xml
根據我從我需要爲我所有的實體類獨立的DAO類提供的樣品瞭解其配置爲
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
<property name="persistenceUnitName" value="hibernatePersistenceUnit" />
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource" ref="dataSource" />
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
所以我無法找到一個方法來設置entitiyManager
和在spring-ws-servlet.xml
中實例化它們。
<bean id="testDao" class="com.sample.dao.TestDao" />
<bean id="service"
class="com.sample.service.DefaultService">
<property name="testDao" ref="testDao" />
</bean>
我認爲這將是從長遠來看,一個問題,因爲我需要在數據庫中的每個表中的兩個分離的類,在XML instaintiating他們,跟蹤所有的人都在我的服務類。是否有任何方法可以克服這一點或任何可用的最佳做法?
提示:扔掉你的解決方案並使用[Spring Data JPA](http://projects.spring.io/spring-data-jpa/)。這樣你只需要聲明一些接口(不需要實現!)就可以添加一行xml配置來獲得所有你需要的dao。 –