весенняя загрузка - обмен уникальным идентификатором между @Transactional и @Aspect - PullRequest
0 голосов
/ 21 декабря 2018

Я написал @ interface

@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>>

...