Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使EhCache重置一个域可能与其他域具有的一对多关系的缓存?_Java_Spring_Hibernate_One To Many_Ehcache - Fatal编程技术网

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);
}