Проект, над которым я работаю, имеет аналогичную структуру для 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)
), НЕ переплетены.
Время компиляции и ткачество во времени должны делать то же самое, только в разные моменты времени. Почему изменилось поведение ткачества?