0
我有same problem,我的交易没有写入数据库。我觉得这个春天问题方面是不是框架的一个bug,但配置文件的问题(applicationContext.xml中的理解),所以我把我的配置文件:与Spring e Jpa的交易
...
<!-- this is a bridge for entityManager and PersistenceUnit -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="fb-persistence" />
</bean>
<bean id="myTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean name="pluginDaoImpl" class="it.synclab.fb.jpa.dao.impl.PluginDaoImpl" />
</beans>
一个界面:
public interface PluginDao {
public Plugin load (int id);
public void save(Plugin plg);
}
接口的实现是:
public class PluginDaoImpl implements PluginDao {
@PersistenceContext (unitName="fb-persistence")
private EntityManager em;
public void setEntityManager(EntityManager entityManager) {
this.em = entityManager;
}
@Transactional
public Plugin load(int id) {
return em.find(Plugin.class, id);
}
@Transactional(readOnly=false, propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void save(Plugin plg) {
em.persist(plg);
//em.flush();
}
}
和Fundo的枣,我PluginTest(脏测试)是:
public class PluginTest{
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
PluginDao dao = (PluginDao) applicationContext.getBean("pluginDaoImpl");
Plugin plugin1 = new Plugin();
//inserisco un nuovo plugin
//plugin.setId(14);
plugin1.setMethod("prova");
plugin1.setDescrizione("questa Bean Class!");
dao.save(plugin1);
Plugin plugin = new Plugin();
//carico un plugin per id
plugin = dao.load(9);
System.out.println("id: " + plugin.getId() +
" Descrizione: " + plugin.getDescrizione() +
" Method: " + plugin.getMethod());
}
如果我现在添加方法PluginDaoImpl.save(),em.flush行代码中,我得到这个错误:
Exception in thread "main" javax.persistence.TransactionRequiredException: no transaction is in progress *
*原因尚不specificated。
行18 XML文档中的类路径资源[ applicationContext.xml]无效;嵌套的异常是org.xml.sax.SAXParseException:元素“tx:annotation-driven”的前缀“tx”未绑定。 – giulius
@giulius,那么你还需要添加tx命名空间。看到我更新的答案 –
你已经合作编写Spring:P ..感谢,它的工作,现在“坚持”到分贝。为了保持完整性,请阅读您的链接以了解有关Spring的更多信;) – giulius