春季如何使用@Transactional

时间:2020-03-22 14:28:42

标签: java spring hibernate transactions hibernate-entitymanager

我的项目中有一些代码,所以如果使用@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>

1 个答案:

答案 0 :(得分:0)

@Transactional是Spring事务的注释。

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

我假设jpaTransactionManger也是自定义配置的,因此如果要使用此jpaTransactionManager,则必须使用@CoreTransactional