我正在使用JPA和Hibernate,在我的项目中,我有一个带有SQL过滤器选项的UI,它就像一个要搜索的配置文件,用户选择选项并从中选择一个昵称个人资料并保存在BD。
但我认为不仅仅是一个保存过滤器的地图/实体类不是一个好主意,那么我想,为什么我不在BD上的String列上保存JPQL / SQL,并在用户可以使用它时进行检索?
我尝试使用Criteria,但是不能从中提取JPQL,我如何使用标准,或者更好地解决这个问题?
一个小例子:
@SuppressWarnings("unchecked")
public List<Empresa> filtrados(FilterEmpresa filtro) {
Session session = manager.unwrap(Session.class);
Criteria criteria = session.createCriteria(Empresa.class);
if (StringUtils.isNotBlank(filtro.getCodigo())) {
try {
Long longCodigo = Long.parseLong(filtro.getCodigo());
criteria.add(Restrictions.eq("id", longCodigo));
} catch (NumberFormatException ex) {
}
}
if (StringUtils.isNotBlank(filtro.getNome())) {
criteria.add(Restrictions.ilike("nome", filtro.getNome(),
MatchMode.START));
}
if (StringUtils.isNotBlank(filtro.getNomeResumido())) {
criteria.add(Restrictions.ilike("nomeResumido",
filtro.getNomeResumido(), MatchMode.START));
}
return criteria.addOrder(Order.asc("nome")).list();
}
和FilterEmpresa.class:
public class FilterEmpresa implements Serializable {
private static final long serialVersionUID = 1L;
private String codigo;
private String nome;
private String nomeResumido;
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getNomeResumido() {
return nomeResumido;
}
public void setNomeResumido(String nomeResumido) {
this.nomeResumido = nomeResumido;
}
}
感谢您的帮助。