Java 如何使EhCache重置一个域可能与其他域具有的一对多关系的缓存?
数据库Java 如何使EhCache重置一个域可能与其他域具有的一对多关系的缓存?,java,spring,hibernate,one-to-many,ehcache,Java,Spring,Hibernate,One To Many,Ehcache,数据库 母亲表格 +-----------+------+ |母亲的姓名| +-----------+------+ |1 | m1| |2平方米| +-----------+------+ child表 +----------+-----------+------+ |儿童身份证|母亲身份证|姓名| +----------+-----------+------+ |1 | 1 | c1| |2 | 1 | c2| |3 | 2 | c3| +----------+-----------+--
母亲
表格
+-----------+------+
|母亲的姓名|
+-----------+------+
|1 | m1|
|2平方米|
+-----------+------+
child
表
+----------+-----------+------+
|儿童身份证|母亲身份证|姓名|
+----------+-----------+------+
|1 | 1 | c1|
|2 | 1 | c2|
|3 | 2 | c3|
+----------+-----------+------+
域
Mother.java
@实体
@表(name=“mother”)
公共阶级母亲{
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“mother”)
公共列表getChilds(){
把这个还给我;
}
}
Child.java
@实体
@表(name=“child”)
公营儿童{
@manytone(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name=“id\u mother”,nullable=false)
公共母亲{
把这个还给我,妈妈;
}
}
Daos
MotherDao.java
公共接口{
@可缓存(cacheName=“dao”)
公共列表findAll();
@TriggersRemove(cacheName=“dao”)
公共作废删除(整数pk);
}
MotherDao.java
公共接口ChildDao{
@可缓存(cacheName=“dao”)
公共列表findAll();
}
Conf
applicationContext.xml
ehcache.xml
问题
System.out.println(motherDao.findAll().size());
System.out.println(childDao.findAll().size());
删除(1);
System.out.println(motherDao.findAll().size());
System.out.println(childDao.findAll().size());
印刷品:
2
3.
1.
3.
而不是:
2
3.
1.
1.
由于删除了母级,级联删除了两个子级,但是前面的childDao.findAll()
缓存了它的结果
问题
如何使EhCache重置一个域与其他域可能具有的一对多关系的缓存?对此,您可能使用两个缓存。下面是一个例子
public interface ChildDao {
@Cacheable(cacheName = "childDao")
public List<Child> findAll();
}
公共接口ChildDao{
@可缓存(cacheName=“childDao”)
公共列表findAll();
}
刀妈妈
public interface MotherDao {
@Cacheable(cacheName = "motherDao")
public List<Mother> findAll();
@TriggersRemove(cacheName={"motherDao", "childDao"})
public void delete(Integer pk);
}
公共接口{
@可缓存(cacheName=“motherDao”)
公共列表findAll();
@TriggersRemove(cacheName={“motherDao”,“childDao”})
公共作废删除(整数pk);
}
您可以使用两个缓存进行此操作。下面是一个例子
public interface ChildDao {
@Cacheable(cacheName = "childDao")
public List<Child> findAll();
}
公共接口ChildDao{
@可缓存(cacheName=“childDao”)
公共列表findAll();
}
刀妈妈
public interface MotherDao {
@Cacheable(cacheName = "motherDao")
public List<Mother> findAll();
@TriggersRemove(cacheName={"motherDao", "childDao"})
public void delete(Integer pk);
}
公共接口{
@可缓存(cacheName=“motherDao”)
公共列表findAll();
@TriggersRemove(cacheName={“motherDao”,“childDao”})
公共作废删除(整数pk);
}