我的设置是Spring MVC 3.1,Hibernate 4.1有两个数据库。
我的服务方法似乎适用于读取(对于两个dbs)。但是持久化无法在数据库中插入数据 - 并且在日志中没有例外。看一下hibernate的sql输出,看起来它确实检索了新生成的id,但后来却没有插入 - 如果它没有显示在db中,也没有在日志文件中记录插入。在db中我可以看到序列号递增但没有插入数据。我无法弄清楚我的配置有什么问题。希望有人有个主意。
以下是配置文件中的相关内容
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
</bean>
<bean id="mgrFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource">
<property name="packagesToScan" value="xxx.yyy" />
<property name="persistenceUnitName" value="puOne"/>
<property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"/>
</property>
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="txMgr"/>
<bean id="txMgr"
class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="mgrFactory">
</bean>
这样可以正常工作。我现在要做的是添加使用另一个数据库的能力。所以我添加了另一个数据源,实体管理器工厂和事务管理器
<bean id="dataSourceTwo" class="org.apache.commons.dbcp.BasicDataSource">
</bean>
<bean id="mgrFactoryTwo"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSourceTwo">
<property name="packagesToScan" value="xxx.zzz" />
<property name="persistenceUnitName" value="puTwo"/>
<property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"/>
</property>
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="txMgrTwo"/>
<bean id="txMgrTwo"
class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="mgrFactoryTwo">
</bean>
我还确保两个相应的基础DAO使用单位名称注释其实体管理器,如
@PersistenceContext(unitName = "puOne")
protected EntityManager entityManager;
我做的最后一件事是将@Transactional注释中的事务管理器名称添加到我的服务中,如
@Override
@Transactional(value="txMgrTwo" propagation = Propagation.REQUIRED)
public boolean create(User user) {
userDao.persist(user);
}