Весенняя загрузка - обмен уникальным идентификатором между @Transactional и @Aspect
Я написал @интерфейс
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface WriteToMap {
}
аспект
@Aspect
@Configuration
public class WriteToMapAspect {
@Autowired
private SingletonBuffer singletonBuffer;
@AfterReturning(value = "@annotation(writeToMap)", returning = "data")
public void processExecutionTime(WriteToMap writeToMap, Object data){
singletonBuffer.putToMap("key", data); // I am facing issue here how to get key
}
Ниже приведены мои методы репозитория, где я аннотировал @WriteToMap
Отдел Репо
@Repository
public interface DepartmentRepository extends CrudRepository<DepartmentEntity, Long> {
@Override
@WriteToMap
<S extends DepartmentEntity> S save(S entity);
}
Филиал Репо
@Repository
public interface BranchRepository extends CrudRepository<BranchEntity, Long> {
@Override
@WriteToMap
<S extends BranchEntity> S save(S entity);
}
CategoryRepo
@Repository
public interface CategoryRepository extends CrudRepository<CategoryEntity, Long> {
@Override
@WriteToMap
<S extends CategoryEntity> S save(S entity);
}
обслуживание
@Override
@Transactional
public DepartmentBo save(DepartmentBo departmentBo) {
departmentRepository.save(departmentBo.toEntity())
branchRepository.save(departmentBo.getBranch().toEntity())
categoryRepository.save(departmentBo.getCategory().toEntity())
return departmentBo;
}
Моя проблема заключается в том, что при запуске транзакции я хочу сгенерировать / получить уникальный ключ (не подлежащий совместному использованию через несколько транзакций, но совместно используемый в аспектах, вызывающих в рамках транзакции), который будет доступен до завершения транзакции. этот ключ я хочу установить здесь
singletonBuffer.putToMap("key", data); // I am facing issue here how to get key
Примечание: putToMap в основном добавляет элемент в список на основе ключа, т.е. Map<String,List<Object>>