我有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
}
我还有两个相应的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表中。
之后我希望用a.getbSet()
中的每个元素填充我的bCache,其中键为b.name,值为B实例。
如何才能使此功能正常工作?
------------------------- UPDATE --------------------- ------
为了满足我的需求,我希望缓存看起来像:
KEY | VALUE
name1 | B(name1)
name2 | B(name2)
如果我想在保存到A时将其保存到缓存中,我如何使用SPEL定义cachePut的密钥(记住A包含B个实例集)? 可能吗?
感谢。