0
everyone。休眠查詢按示例不按預期方式工作
對不起,有些英文錯誤。
我正在使用Vaadin爲一些搜索任務構建前端搜索界面。
在前端,我只有一個名爲「telefone」的文本字段,它應該填充實體bean(telefone1,telefone2和telefone3)中的三個字段,因爲用戶提供的電話號碼可以在任何「telefone」領域。請參閱下面的代碼:
@SuppressWarnings("unchecked")
@Override
public List<Fornecedor> executaPesquisaAvancadaDeFornecedores(Fornecedor fornecedor) {
Map<Integer, Fornecedor> fornecedoresMap = new HashMap<Integer, Fornecedor>();
if(fornecedor.getTelefone1() != null) fornecedor.setTelefone1("%" + fornecedor.getTelefone1() + "%");
fornecedor.setTelefone2(fornecedor.getTelefone1());
fornecedor.setTelefone3(fornecedor.getTelefone1());
Example exampleFornecedor = Example.create(fornecedor).enableLike(MatchMode.ANYWHERE).ignoreCase();
Criteria criteria = super.getSession().createCriteria(Fornecedor.class, "fornecedor").add(exampleFornecedor);
List<Fornecedor> fornecedores = criteria.list();
for(Fornecedor f : fornecedores) {
fornecedoresMap.put(f.getId(), f);
}
return new ArrayList<Fornecedor>(fornecedoresMap.values());
}
在這種情況下,沒有由criteria.list()方法提供的結果。但是,如果我刪除「telefone2」和「telefone3」制定者,像這樣...
if(fornecedor.getTelefone1() != null) fornecedor.setTelefone1("%" + fornecedor.getTelefone1() + "%");
...的標準和QBE返回正確的結果,但前提是所提供的電話被保存在「telefone1」領域。
我的問題是爲什麼發生這種情況? AFAIK,Hibernate Query By Example匹配基於填充的給定搜索字段的結果,忽略空屬性。
謝謝。