从独立索引删除不会反映已删除实体用作@IndexedEmbedded的索引

时间:2019-09-20 10:26:22

标签: hibernate-search

我们正在使用休眠搜索5.9.2。

我们有两个具有A和B的实体。A与B具有一对多关系。我们按如下方式使用它们:

@Entity
@Indexed(index="master_index")
public class A{

        @IndexedEmbedded
    private Set<B> b= new HashSet<>(0);
        //Setter and getter for b

}

@Entity
@Indexed(index = "b")
public class B{
    @ContainedIn
    private A a;
        //Setter and getter for a
}

.hbm文件下定义了一对多关系。

现在,当某些记录直接从索引B中删除(但通过休眠过程)时,不会从'master-index'中删除同一记录。

让我们假设我有一条记录“ xyz”,该记录在索引B下可用,并且在“ A”下也可用,并且具有类似DUDE(A的数据)的关系,可以包含许多数据,例如“ xyz”。

DUDE-> xyz

预期结果应该是记录应从索引'b'以及'master-index'中删除。

冬眠搜索提供了一种处理这种情况的方法。

2 个答案:

答案 0 :(得分:1)

确定了原因,为什么它不起作用。将尝试在下面提供这些发现:

最初,在我的旧代码中,我们的系统通过查询获取要删除的数据,然后触发了executeUpdate(),并且没有使用session.delete()删除数据。由于这个原因,休眠缓存不知道该对象的删除。

下面是新旧代码:

旧版本:

Query query = session.getNamedQuery("deleteBySeqnumRec");   
            query.setLong("seqnum", seqnum);    
            int result = query.executeUpdate(); 
            status.setNumOfRows(result);

新版本

DataTO dataTO = selectById(new DataTO, seqnum);
            if(!dataTO.isRecNotFound()) {
                session.delete(dataTO);
                status.setNumOfRows(1);
            }

答案 1 :(得分:0)

Hibernate Search希望双向关联在双方上保持一致。

这意味着删除B时,应将其从A.b中删除。这将导致实体A发生变化,这将触发该实体的重新索引。

如果A未重新编制索引,则可能意味着您忘记从B中删除A.b

相关问题