在BD上的String列中保存SQL的JPA

时间:2015-08-19 05:49:13

标签: java hibernate jpa criteria jpql

我正在使用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;
}

}

感谢您的帮助。

0 个答案:

没有答案