В JPA, если у меня есть два класса объектов Account и CheckingAccount, так что CheckingAccount расширяет Account.I есть экземпляр объекта CheckingAccount с первичным ключом из 10.
Cache c=//get a reference to caache from entity manager factory
c.evict(Account.class,10);
boolean flag1=c.contains(Account.class,10);
boolean flag2=c.contains(CheckingAccount.class,10);
значение обоих флагов будет ложным.
Первые c.contains(Account.class,10)
безусловно, будут ложными - вы либо удалили этот объект из кеша, либо он не существует.
Второй c.contains(CheckingAccount.class,10)
может быть прав, если этот объект был помещен в кеш.
Версия метода evict
которая принимает второй аргумент, работает только для данного объекта данного идентификатора. Это не то же самое, что Cache#evict(Class)
который удаляет все сущности вместе с ними подклассы из кеша.