Обновление Spring Cache при сохранении сущности с отношением один ко многим - PullRequest
0 голосов
/ 02 мая 2018

У меня есть 2 сущности со следующими отношениями один ко многим:

public class A {

  @ID
  private String id;

  @OneToMany(mappedBy = "a",cascade = CascadeType.ALL, orphanRemoval = true)
  private Set<B> bSet;
  //getters setters and constructors
}

public class B {

  @ID 
  private String name

  @ManyToOne
  @JoinColumn(name = "id",nullable = false)
  private A a;

  //getters setters and constructors
}

У меня также есть 2 соответствующих хранилища для A и B следующим образом:

@Repository
public interface BRepository extends JpaRepository<B,String> {

  @Cacheable(value = "bCache", key = "#p0")
  B findOneByName(String name);

  Set<B> findAllByNameIn(Set<String> names);

  @Override
  @CacheEvict(value = "bCache", key = "#p0")
  void delete(String name);
}

@Repository
public interface ARepository extends JpaRepository<A,String> {

}

Когда я делаю:

A a = new A("id1");
B b1 = new B("name1", a);
B b2 = new B("name2", a);
a.getbSet().add(b1);
a.getbSet().add(b2);

aRepository.save(a);

тогда все объекты B вставляются в таблицу B в хранилище. После этого я хочу, чтобы мой bCache был заполнен каждым элементом в a.getbSet(), ключом является b.name, а значением - экземпляр B.

Как мне заставить эту функцию работать?

------------------------- UPDATE --------------------- ------

Чтобы ответить на мои потребности, я хочу, чтобы кеш выглядел следующим образом:

KEY   |   VALUE
name1 | B(name1)
name2 | B(name2)

Как я могу использовать SPEL для определения ключа для cachePut, если я хочу сохранить его в кеше, когда я выполняю сохранение в A (помните, что A содержит множество экземпляров B)? Является ли это возможным?

Спасибо.

...