Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注释传播。从不工作_Java_Spring_Hibernate_Hibernate Annotations_Propagation - Fatal编程技术网

Java 注释传播。从不工作

Java 注释传播。从不工作,java,spring,hibernate,hibernate-annotations,propagation,Java,Spring,Hibernate,Hibernate Annotations,Propagation,程序员!我不明白doeas传播属性在@Transactional注释中是如何工作的。求求你,救命 <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager&q

程序员!我不明白doeas传播属性在@Transactional注释中是如何工作的。求求你,救命

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

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="packagesToScan" value="com.springapp.mvc"></property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.jdbc.batch_size">10</prop>
                <prop key="hibernate.max_fetch_depth">3</prop>
                <prop key="jdbc.fetch_size">50</prop>
                <prop key="hbm2ddl.auto">create-drop</prop>
            </props>
        </property>
        <property name = "dataSource" ref = "dataSource"></property>
    </bean>
我希望method2方法抛出一个异常,因为它是用Propagation.NEVER注释的。但这并没有发生

输出 为什么它不起作用


谢谢:

Spring中的事务是基于代理的:当bean a调用事务bean B时,它实际上调用了动态代理的方法,该方法处理事务的开始,然后委托给实际的bean B,然后处理事务的提交/回滚

如果从单个bean a的method1调用method2,事务代理将不再拦截您的调用,因此Spring完全不知道method2已被调用。因此,没有任何东西可以检查是否存在交易


将method2放入另一个bean中,注入BookManager,一切都将按预期工作。

如果您可以添加异常stacktrace并列出您已经拥有的解决方案,那将非常好tried@VirajNalawade,看看控制台上发生了什么!你的选择真的有效。尽管如此,我还是阅读了一些文档,其中指出解决问题的另一种方法是:因此,我在线程main org.hibernate.HibernateException中收到以下stacktrace:xception:无法获取当前线程的事务同步会话。也许你会提示,我做错了什么?不知道。我从不使用那种模式。
   @Service
   public class BookManager implements IBookManager {

      @Autowired
      private  SessionFactory  sessionFactory;

      @Override
      @Transactional(propagation = Propagation.REQUIRES_NEW)
      public void method1() {
          Session session = sessionFactory.getCurrentSession();
          Book book = (Book) session.load(Book.class, 1);
          System.out.println("first: " + book.getTitle());
         method2();
      }

      @Override
      @Transactional(propagation = Propagation.NEVER)
      public void method2() {
            System.out.println("hello");
     }
 }
 июн 27, 2015 3:35:35 PM org.hibernate.dialect.Dialect <init>
 INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
 июн 27, 2015 3:35:35 PM  org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation
 INFO: HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
 июн 27, 2015 3:35:36 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
 INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
 июн 27, 2015 3:35:36 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
 INFO: HHH000397: Using ASTQueryTranslatorFactory
 июн 27, 2015 3:35:36 PM org.springframework.orm.hibernate4.HibernateTransactionManager           afterPropertiesSet
 INFO: Using DataSource [org.apache.commons.dbcp.BasicDataSource@6c5945a7] of Hibernate SessionFactory for HibernateTransactionManager
 Hibernate: select book0_.id as id1_0_0_, book0_.title as title2_0_0_ from books book0_ where book0_.id=?
 first: 33
 hello

 Process finished with exit code 0