【问题标题】:How to use @Transactional in spring如何在春季使用@Transactional
【发布时间】:2020-03-22 14:28:42
【问题描述】:

我的项目中有一些代码,那么如果使用 @Transactional 而不是 @CoreTransactional 有什么不同?

  @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Transactional(transactionManager = "jpaTransactionManager")
    public @interface CoreTransactional {
    }
And this is config.xml 
<!-- Transaction manager -->
    <bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="emfOracle"/>
    </bean>

<!-- Entity manager -->
    <bean id="emfOracle" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" primary="true">
        <property name="dataSource" ref="dataSourceOracle" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
        <property name="packagesToScan">
            <array>
                <value>com.heb.pm</value>
                <value>com.heb.util.jpa</value>
            </array>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.Oracle10gDialect
                </prop>
                <prop key="hibernate.max_fetch_depth">3</prop>
                <prop key="hibernate.jdbc.fetch_size">50</prop>
                <prop key="hibernate.jdbc.batch_size">10</prop>
                <prop key="hibernate.show_sql">${jpa.showSql}</prop>
                <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
                <prop key="hibernate.default_schema">${jpa.schema.oracle}</prop>
                <prop key="hibernate.enable_lazy_load_no_trans">true</prop>
            </props>
        </property>
    </bean>

【问题讨论】:

  • 这个注解的封装是什么?没见过
  • 这是一个习惯

标签: java spring hibernate transactions hibernate-entitymanager


【解决方案1】:

@Transactional 是 Spring 事务的注解。

而@CoreTransactional 是使用@Transactional 注释并使用jpaTransactionManger 的自定义注释。

我假设 jpaTransactionManger 也是自定义配置的,所以如果你想使用这个 jpaTransactionManager,你必须使用@CoreTransactional

【讨论】:

  • 我刚刚在 config.xml 文件中添加了代码,请看一下。
  • 这就是我所期望的。但是你的问题是什么?
猜你喜欢
  • 2015-09-18
  • 2015-10-06
  • 2013-11-12
  • 2020-02-02
  • 2015-01-22
  • 2015-12-11
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多