更改一个字段后 Hibernate 搜索不编制索引
Hibernate Search Not Indexing after change one field
您好,我正在尝试解决 Hibernate 搜索以索引由经典 Sql 查询更改的列的问题,如下所示:
@Override
public boolean updateColumn(K entityId, String columnName, String columnValue) {
String entityName = daoType.getSimpleName();
ClassMetadata employeeMeta = currentSession().getSessionFactory().getClassMetadata(daoType);
String primaryKey = employeeMeta.getIdentifierPropertyName();
String queryString = "update " + entityName + " set " + columnName + "='" + columnValue + "' where " + primaryKey + "=" + entityId;
org.hibernate.Query query = currentSession().createQuery(queryString);
boolean result = query.executeUpdate() > 0;
return result;
}
调用上面的方法如下:
belgeSatirService.updateColumn(1, "basvuruNo", "thgm");
更新 "basvuruNo" 列后,Hibernate 不会自动更新 basvuruNo 列。该列的定义如下:
@Field(store = Store.YES)
@Column(name = "BasvuruNo", length = 30)//13/95088973/0735/000001
@Analyzer(definition = "whitespaceanalyzer")
private String basvuruNo;
Hibernate Search 不支持拦截使用查询应用的更新更改。
我建议重写 DAO 模式以使用 Hibernate 友好模式:通过在您的域模型上使用实际对象和设置器。
您将从中获得其他一些好处,例如:
- 使启用二级缓存成为可能。
- 脏检查的好处:避免不必要的数据库连接和操作。
- 高性能状态处理,是否要启用字节码检测或类似功能。
- Hibernate Envers、Hibernate Search 和其他工具已正确集成。
- 您还将在运行时节省内存负载:更好的性能。
这样的方法看起来像这样:
public void updateBasvuruNo(K entityId, Class<E> type, String newBasvuruNo) {
E yourEntity = currentSession().load( type, entityId );
yourEntity.setBasvuruNo( newBasvuruNo );
}
受管实体的状态根据需要刷新到数据库,仅在需要时刷新,并由您的应用程序控制:通常由事务范围控制。
所以你可能根本不想使用这样的助手,它只是不必要的样板文件。
您好,我正在尝试解决 Hibernate 搜索以索引由经典 Sql 查询更改的列的问题,如下所示:
@Override
public boolean updateColumn(K entityId, String columnName, String columnValue) {
String entityName = daoType.getSimpleName();
ClassMetadata employeeMeta = currentSession().getSessionFactory().getClassMetadata(daoType);
String primaryKey = employeeMeta.getIdentifierPropertyName();
String queryString = "update " + entityName + " set " + columnName + "='" + columnValue + "' where " + primaryKey + "=" + entityId;
org.hibernate.Query query = currentSession().createQuery(queryString);
boolean result = query.executeUpdate() > 0;
return result;
}
调用上面的方法如下:
belgeSatirService.updateColumn(1, "basvuruNo", "thgm");
更新 "basvuruNo" 列后,Hibernate 不会自动更新 basvuruNo 列。该列的定义如下:
@Field(store = Store.YES)
@Column(name = "BasvuruNo", length = 30)//13/95088973/0735/000001
@Analyzer(definition = "whitespaceanalyzer")
private String basvuruNo;
Hibernate Search 不支持拦截使用查询应用的更新更改。
我建议重写 DAO 模式以使用 Hibernate 友好模式:通过在您的域模型上使用实际对象和设置器。
您将从中获得其他一些好处,例如:
- 使启用二级缓存成为可能。
- 脏检查的好处:避免不必要的数据库连接和操作。
- 高性能状态处理,是否要启用字节码检测或类似功能。
- Hibernate Envers、Hibernate Search 和其他工具已正确集成。
- 您还将在运行时节省内存负载:更好的性能。
这样的方法看起来像这样:
public void updateBasvuruNo(K entityId, Class<E> type, String newBasvuruNo) {
E yourEntity = currentSession().load( type, entityId );
yourEntity.setBasvuruNo( newBasvuruNo );
}
受管实体的状态根据需要刷新到数据库,仅在需要时刷新,并由您的应用程序控制:通常由事务范围控制。 所以你可能根本不想使用这样的助手,它只是不必要的样板文件。