Подтвердить что ты не робот

@Transactional в суперклассах, не сотканных при использовании времени загрузки

Проект, над которым я работаю, имеет аналогичную структуру для DAO для одного ниже:

/** 
* Base DAO class
*/
@Transactional    
public class JPABase {

  @PersistenceContext
  private EntityManager entityManager;

  public void persist(Object entity) {
    entityManager.persist(entity);
  }
 //some more methods in here
}

и

/** 
* Generic DAO class implementation
*/
@Transactional 
public abstract class GenericDao extends JpaBase {
   //some methods in here
}

и

/** 
* Specialized DAO class
*/
@Repository
@Transactional
public class PersonDao extends GenericDao {
  //some methods in here
}

До сих пор в проекте использовалось время компиляции, но конфигурация изменилась на использование <context:load-time-weaver/> с -javaagent:/opt/tomcat7-1/lib/spring-instrument.jar.

Поскольку это изменение было применено, аннотации JpaBase и GenericDao @Transactional больше не сотканы. Каждый раз, когда класс службы вызывает метод persist объекта PersonDao, транзакция не запускается.

Примечательно:

  • Это использовалось для работы в прошлом, когда используется компиляция времени.
  • все методы, которые определены в PersonDao, сотканы правильно, но те, которые унаследованы (например, persist(Object entity)), НЕ переплетены.

Время компиляции и ткачество во времени должны делать то же самое, только в разные моменты времени. Почему изменилось поведение ткачества?

4b9b3361