我正在使用@AdditionalCriteria向某个实体添加条件。 与该实体相关的所有查询都使用除实体管理器的find方法之外的其他条件。
它可能与find方法的性质有关,因为它直接检查对象的缓存而不首先从数据库中获取id。
如何让其他条件与find方法一起使用。
EntityManager em;
Certain c=em.find(Certain.class,id);
答案 0 :(得分:1)
正如您所提到的,find只会进入缓存而不是数据库,因此缓存必须包含超出您指定的其他条件范围的数据。我不建议直接在您的实体上使用过滤器,因为没有好的方法来判断您是否拥有数据库中存在的数据的真实表示,或者您的实体在进行修改时处于什么状态。 / p>
让find方法遵守您的附加条件的方法是强制刷新数据库。您可以为查找调用提供EclipseLink refresh hint,也可以在查找调用后在实体上显式调用em.refresh()。