您好我正在尝试解决Hibernate Search索引经典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;
答案 0 :(得分:2)
Hibernate Search不支持拦截使用查询应用的更新更新。
我建议重写DAO模式以使用Hibernate友好模式:在域模型上使用实际对象和设置器。
您还可以从中获得其他一些好处,例如:
这样的方法看起来像这样:
public void updateBasvuruNo(K entityId, Class<E> type, String newBasvuruNo) {
E yourEntity = currentSession().load( type, entityId );
yourEntity.setBasvuruNo( newBasvuruNo );
}
管理实体的状态根据需要刷新到数据库,仅在需要时由应用程序控制:通常由事务范围控制。 所以你可能根本不想使用这样的帮助器,它只是不必要的样板。