You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate Search 6创建TableRow后未自动索引cellValues问题

Hibernate Search 6创建TableRow时未索引cellValues的问题解决

问题原因

创建操作中,传入的TableRow对象关联的TableDoc是仅含ID的非托管对象(JSON反序列化生成),Hibernate持久化时未正确触发TableRow的post-persist索引事件;同时双向关联仅维护了TableRow端,未更新TableDoc的tableRows集合,导致TableDoc的索引无法同步新TableRow的cellValues数据。而更新操作因先加载了托管状态的TableRow,修改后保存会触发post-update事件,索引正常更新。

解决方案

方案1:维护双向关联并使用托管实体

加载真实的TableDoc托管实体,同时更新双向关联两端,确保Hibernate自动触发索引:

public TableRow create(TableRow tableRow) {
    TableDoc tableDoc = tableDocRepository.findById(tableRow.getTableDoc().getId())
            .orElseThrow(() -> new ObjectNotFoundException("TableDoc", "id", tableRow.getTableDoc().getId()));
    tableRow.setTableDoc(tableDoc);
    tableDoc.getTableRows().add(tableRow);
    tableDocRepository.save(tableDoc);
    return tableRowRepository.save(tableRow);
}

方案2:手动触发索引

无需维护双向关联时,保存TableRow后手动调用Hibernate Search API触发索引:

@Autowired
private SearchSession searchSession;

public TableRow create(TableRow tableRow) {
    TableRow savedTableRow = tableRowRepository.save(tableRow);
    // 索引新创建的TableRow
    searchSession.indexingPlan().addOrUpdate(savedTableRow);
    // 若需同步更新关联的TableDoc索引,取消下一行注释
    // searchSession.indexingPlan().addOrUpdate(savedTableRow.getTableDoc());
    return savedTableRow;
}

方案3:配置级联持久化(可选)

在TableDoc的@OneToMany注解中添加级联配置,让保存TableDoc时自动持久化关联的TableRow并触发索引:
修改TableDoc的关联注解:

@OneToMany(mappedBy = "tableDoc", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@IndexedEmbedded
@JsonManagedReference
private Set<TableRow> tableRows = new HashSet<>();

创建逻辑调整为:

public TableRow create(TableRow tableRow) {
    TableDoc tableDoc = tableDocRepository.findById(tableRow.getTableDoc().getId())
            .orElseThrow(() -> new ObjectNotFoundException("TableDoc", "id", tableRow.getTableDoc().getId()));
    tableDoc.getTableRows().add(tableRow);
    tableRow.setTableDoc(tableDoc);
    tableDocRepository.save(tableDoc);
    return tableRow;
}

内容的提问来源于stack exchange,提问作者Martin Kršek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:27:22