我正在使用实体管理器执行更新,如下所示:
Query query1 = em.createQuery("update user u set u.changed = true where u.changed is null");
query1.executeUpdate();
更改是一个注释字段,如下所示:
@Column(nullable = false)
@Field(analyzer=@Analyzer(impl=StandardAnalyzer.class))
@FieldBridge(impl=org.hibernate.search.bridge.builtin.BooleanBridge.class)
private Boolean changed = false;
更新后,lucene 索引不会更新。我该怎么做,Lucene指数也会更新?
亲切问候基督教
执行 SQL 查询会绕过会话生命周期。因此,自动索引更新将不起作用。您基本上有两种选择:
- 通过条件查询加载受影响的实体,修改它们,然后保存它们(当然,所有这些都在会话中)
- 通过搜索索引 API 手动为实体编制索引。不过,这里的想法相同,您需要选择/查询要编制索引的正确实体