当前位置: 首页 > 知识库问答 >
问题:

Spring事务注释不工作

东郭海阳
2023-03-14

我将Spring 3.2.4与JavaFX结合使用,并希望实现一种方法,其中操作将在事务中执行。我在控制器中的代码如下所示:

@Transactional(rollbackFor = { ServiceException.class,
            ValidationException.class })
    public void registerVolunteer(User user, Volunteer volunteer)
            throws ServiceException, ValidationException {
        User ret = userService.create(user);
        volunteer.setUser(ret);
        volunteerService.untransactedCreate(volunteer);
    }

以及我的应用程序上下文:

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

    <!-- Transaction Manager -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

尝试运行时,我收到以下错误消息:

Controller method "onBackClicked" not found.
/home/workspace/project/NewProject/target/classes/fxml/RegisterVolunteer.fxml:69
  at javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(FXMLLoader.java:497)
  at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:594)
  at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2472)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2177)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2069)
  at org.impactvolunteers.management.FXMLSpringLoader.load(FXMLSpringLoader.java:97)
  at org.impactvolunteers.management.FXMLSpringLoader.load(FXMLSpringLoader.java:81)
  at org.impactvolunteers.management.gui.Screen.init(Screen.java:50)
  at org.impactvolunteers.management.gui.ScreensController.init(ScreensController.java:43)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:606)
  ...

该方法存在。删除注释,或者将方法从public更改为private,或者从配置中删除bean,程序就会运行,但事务注释根本不起作用。删除代理目标会导致另一个错误。

共有1个答案

扈高逸
2023-03-14

如果您谈论的是@Transactional,那么它用于回滚当前事务发生。

这主要用于制作测试用例,让我向您展示:

RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration("file:src/main/webapp/WEB-INF/dispatcher-servlet.xml")
@TransactionConfiguration(transactionManager = "txManager",defaultRollback = true)
@Transactional
public class AddVendorProcessorTest{

   // Your code
}

现在,在这里的TransactionConfiguration中,从这里获取一个XML文件:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="org.postgresql.Driver"/>
    <property name="url" value="jdbc:postgresql://localhost:5432/db"/>
    <property name="username" value="postgres"/>
    <property name="password" value="pwd"/>
    <property name="validationQuery" value="SELECT 1"/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.domain"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.generate_statistics">true</prop>
        </props>
    </property>
</bean>

<!-- Transaction Manager -->
<bean id="txManager"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="txManager" />

它会自动获取txManagerbean。

仍然如果任何查询POST我。

 类似资料:
  • 我正在尝试在数据库中保存对象。正在执行代码并创建实体的Id,但实体未持久化到数据库(未插入行): 从三行(beginTransation,flush,commit)中删除注释解决了问题,但是为什么注释在这里不起作用呢? spring XML: POM xml文件:

  • 根据我的理解,在methodB()中,我们使用someManager保存一个对象,并调用另一个函数callToSomeOtherServer()。所以这是上层方法中事务的一部分。如果callToSomeOtherServer()失败并抛出someException,整个事务应该回滚,保存的对象不应该在DB中反映。 但这对我不起作用,对象反映在DB中。有人能帮忙让我明白为什么它不起作用吗?

  • 问题内容: 之间有什么区别? 在整个类中添加“ @Transactional”注释 为每个方法添加“ @Transactional”注释? 使用spring和Hibernate吗? 问题答案: 基本上,如果您用所有方法注释该类,则将是事务性的。如果您不这样做,则可以仅将其标注为所需的方法。此外,你可以为每个方法指定不同的属性,如,,,…

  • 在我们的一个项目中,我们遇到了一个问题,Spring忽略了事务注释,然后失败了,出现了以下错误。 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2018-09-13 15:05:18406错误[主]组织。springframework。靴子SpringApplication应用程序运行失败组织。springframework。道。Inva

  • 我正在阅读使用Spring框架的事务管理。在第一个组合中,我使用Spring Hibernate和Hibernate的API来控制事务(Hibernate API)。接下来,我想使用注释进行测试,它确实起了作用。 我感到困惑的是: > JPA、JTA、Hibernate是否有自己的事务管理方式。举个例子,考虑如果我使用Spring Hibernate,在那种情况下,你会使用“JPA”事务吗? 就像

  • 我在玩和 这是我的应用程序上下文文件 以下是我的Java类 HelloWorld1。JAVA 住址JAVA 这里是我尝试运行东西的地方-应用程序。JAVA 我一直在得到这个异常-理想情况下我不应该,因为我已经定义了id为'address1'的@Qualifier注释-所以它不应该抛出异常 警告:上下文初始化过程中遇到的异常-取消刷新尝试:org.springframework.beans.fact