现在我在将一个entityFactoryManager注入我的jpadaosupport扩展类时遇到了问题。
我的配置如下:
<bean id="productDao" class="springapp.repository.JdbcProductDao">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
此bean的上述配置工作正常,但是当我尝试使用注释来配置bean时,我的应用程序不起作用
我的JdbcProductDao.java文件位于
之下@Repository("productDao")
@Transactional
public class JdbcProductDao extends JpaDaoSupport implements ProductDao {
@SuppressWarnings("unchecked")
@Override
public List<Product> getProductList() {
// TODO Auto-generated method stub
return getJpaTemplate().getEntityManagerFactory().createEntityManager()
.createQuery("from Product").getResultList();
}
@Override
public void persist(Product product) {
// TODO Auto-generated method stub
}
@Override
public void saveProduct(Product prod) {
// TODO Auto-generated method stub
getJpaTemplate().merge(prod);
}
@Autowired
@Required
public void setJpaEntityManagerFactory(
@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
super.setEntityManagerFactory(entityManagerFactory);
}
}
然而,似乎没有正确注入EntityManagerFactory,因为没有看到我的数据库事务
有人可以提供任何见解吗?
答案 0 :(得分:2)
你的bean配置文件中有这样的行吗?
<context:component-scan base-package="com.noisyair.whatisayis.web"/>
这告诉spring在某个包中查找带注释的类。
答案 1 :(得分:2)
要使用@Transactional
注释,是否已将行<tx:annotation-driven/>
添加到Spring配置?
有关所有详细信息,请参阅9.5.6. Using @Transactional中的Chapter 9, Transaction management部分。
答案 2 :(得分:1)
您是否申报了交易经理?
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
答案 3 :(得分:1)
关注Pascal's tips后,您可能会解决您的问题。
但是我根据您的代码提出了另一条建议:
JpaDaoSupport
,请使用JpaTemplate
方法。EntityManager
,请通过@PersistenceContext
注入,不要使用JpaDaoSupport
调用createEntityManager()
可能会破坏spring的事务处理。这是因为事务管理器创建了以后使用的当前EntityManager
。如果你自己创建它,你可能最终会有两个不同的EntityManager
s - 一个正在进行的交易,一个 - 不是。
答案 4 :(得分:0)
您宣布了哪位交易经理?知道这可能会暗示一下。
您如何测试交易?当你说“我看不到我的数据库事务”时,你的意思是你是INSERTing对象,但你的数据库没有变化?
有任何错误消息或例外吗?
如果您在调试器中单步执行代码,您认为发生了什么?
确保在CLASSPATH中有Log4J JAR和配置XML。我发现Spring在启动时在控制台中输出了大量信息。你需要看到这一点,以便更好地了解正在发生的事情。确保应用程序上下文正在查找您的bean。还有很多其他方便的信息。没有它,你就会失明。