Jump to content
Sign in to follow this  
_Isis_

Hibernate Validator - CPF não formatado

Recommended Posts

Estou mexendo um pouco com o Hibernate e mesmo sendo uma aplicação "de brinquedo" acabei empacando nos validators.
Baixei o Hibernate Validator 6.0.2Final e estou tentando utilizar o @CPF (que foi incluído no Hibernate Validator) num atributo String do modelo.
Eu importo um arquivo XML e na hora de salvar o validator diz que o CPF é inválido (apenas formato). Procurando na internet vi uns bug reports sobre o @CPF aceitar somente o número formatado, com os separadores, e não aceitar uma string de dígitos apenas. Mas isso, pelo que os comentários indicavam, acontecia na versão 5 e os bug reports foram dados como fechados.
Aí resolvi alterar o formato do CPF que eu estava importando p/ incluir os separadores. Funciona tudo certinho.
Ao invés de me dar por feliz resolvi baixar o fonte do Hibernate Validator e fuçar na classe org.hibernate.validator.constraints.br.CPF. E está lá o pattern com 11 dígitos, sem formatação:

@Pattern.List({
		@Pattern(regexp = "([0-9]{3}[.]?[0-9]{3}[.]?[0-9]{3}-[0-9]{2})|([0-9]{11})"),
		// XXX.XXX.XXX-XX where X is always the same digit are not a valid CPFs, but all of them passes the mod check. Needs to be singled out each one via regexp
		@Pattern(regexp = "^(?:(?!000\\.?000\\.?000-?00).)*$"),
		@Pattern(regexp = "^(?:(?!111\\.?111\\.?111-?11).)*$"),
		@Pattern(regexp = "^(?:(?!222\\.?222\\.?222-?22).)*$"),
		@Pattern(regexp = "^(?:(?!333\\.?333\\.?333-?33).)*$"),
		@Pattern(regexp = "^(?:(?!444\\.?444\\.?444-?44).)*$"),
		@Pattern(regexp = "^(?:(?!555\\.?555\\.?555-?55).)*$"),
		@Pattern(regexp = "^(?:(?!666\\.?666\\.?666-?66).)*$"),
		@Pattern(regexp = "^(?:(?!777\\.?777\\.?777-?77).)*$"),
		@Pattern(regexp = "^(?:(?!888\\.?888\\.?888-?88).)*$"),
		@Pattern(regexp = "^(?:(?!999\\.?999\\.?999-?99).)*$")
})

Já verifiquei no depurador se não tem um espaço em branco perdido na string quando o handler monta o objeto a partir do XML (não tem. Está certo) e continuo sem saber porque esse negócio não aceita CPF não formatado. Alguém já passou por isso e conseguiu resolver?

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By MarKteus
      Olá

      Estou enfrentando um problema bem chato com Java aqui em meu projetos, vejam:
      2019-02-01 08:57:06.469 ERROR 18120 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause com.microsoft.sqlserver.jdbc.SQLServerException: Nome de objeto 'db_mybank.dbo.edification' inválido.     at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:259) ~[mssql-jdbc-6.4.0.jre8.jar:na] Percebam que ali no nome do objeto está sendo inserido um underline ou underscore como queiram, porém esse traço não é para ser exibido a inserção do mesmo faz com que o objeto não seja encontrado, o pior é que na especificação da classe está correto vejam:
       
      import javax.persistence.Table; @Entity @Table(name = "tbedification", schema = "dbo", catalog = "dbmybank") public class edification implements Serializable { /** * Alguém consegue me ajuda com isso, acho que o hibernate está "zuando" alguma coisa

      Estou usando a ide Eclipse Neon e SpringBoot
    • By MarKteus
      Olá amigos
       
      Estou tentando gerando uma consulta usando @query que me traga o resultado de 3 tables SQL Server, porém o Hibernate alega que uma das propriedades não pode ser resolvida, contudo já verifiquei e a tal propriedade foi criada normalmente nas classes de entidades.
       
      O erro é nomedacoluna não pode ser resolvido, a coluna em questã é OccId

      Cabeçalho da classe
      @Entity
      @Table(name = "tabela", schema = "dbo", catalog = "dbtabela")
      public class OccurrenceChangeCancelLog implements Serializable {

      corpo e atributo que da o erro:
          private Integer OccId;

      construtor
          public OccurrenceChangeCancelLog(Integer occId) {
              this.OccId = occId;

          }

      Get e Set:
          @Column(name = "OcorrId")
          public Integer getIntOcorrId() {
              return this.OccId;
          }
          public void setIntOcorrId(Integer occId) {
              this.OccId = OcorrId;
          }

      @Query("select distinct oc.campos1,  mlt.campo2 "
                  + "from Occurre oc INNER JOIN "
                  + "OccurrenceChangeCancelLog mlt ON mlt.OccId = oc.OccurreId "
                  + "where mlt.dataLog >= :dtaLogOne AND mlt.dataLog <= :dtaLogTwo ")


      Alguém sabe o que pode ser?
    • By MarKteus
      Olá amigos
       
      Estou tentando gerando uma consulta usando @query que me traga o resultado de 3 tables SQL Server, porém o Hibernate alega que uma das propriedades não pode ser resolvida, contudo já verifiquei e a tal propriedade foi criada normalmente nas classes de entidades
    • By manoveio1
      Estou desenvolvendo um sisteminha em, pra fins de conhecimento. Estou usando eclipse, photon ,postgres, hibernate, maven e primefaces. Ele está gravando os dados normalmente no banco de dados. A data e hora ele esta pegando automaticamente do sistema. Até ai esta blz. O problema está qdo atualizo os dados, a data e a hora nao estao atualizando, porem outros dados estao.
      Segue os dados:
      meu domain:
      package br.pro.silvio.prati.domain; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Temporal; import javax.persistence.TemporalType; @SuppressWarnings("serial") @Entity public class Area extends GenericDomain { @Column(name = "nome",length =20, nullable = false) private String nome; @Column( name = "status",length =10) private String status; @Column(name = "cadpor",length =20) private String cadpor; @Column(name ="datcad") @Temporal(TemporalType.DATE) private Date datcad = new java.sql.Date(System.currentTimeMillis()); @Column(name = "hora") @Temporal(TemporalType.TIME) private Date hora =new java.sql.Date(System.currentTimeMillis()); public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getCadpor() { `return cadpor;` } public void setCadpor(String cadpor) { this.cadpor = cadpor; } public Date getDatcad() { return datcad; } public void setDatcad(Date datcad) { this.datcad = datcad; } public Date getHora() { return hora; } public void setHora(Date hora) { this.hora = hora; } } meu dao generico:
      package br.pro.silvio.prati.dao; import java.lang.reflect.ParameterizedType; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import br.pro.silvio.prati.util.HibernateUtil; public class GenericDAO<Entidade> { private Class<Entidade> classe; @SuppressWarnings("unchecked") public GenericDAO() { this.classe = (Class<Entidade>) ((ParameterizedType) getClass().getGenericSuperclass()) .getActualTypeArguments()[0]; } public void salvar(Entidade entidade) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); Transaction transacao = null; try { transacao = sessao.beginTransaction(); sessao.save(entidade); transacao.commit(); } catch (RuntimeException erro) { if (transacao != null) { transacao.rollback(); } throw erro; } finally { sessao.close(); } } @SuppressWarnings("unchecked") public List<Entidade> listar() { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); try { Criteria consulta = sessao.createCriteria(classe); List<Entidade> resultado = consulta.list(); return resultado; } catch (RuntimeException erro) { throw erro; } finally { sessao.close(); } } @SuppressWarnings("unchecked") public Entidade buscar(Long codigo) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); try { Criteria consulta = sessao.createCriteria(classe); consulta.add(Restrictions.idEq(codigo)); Entidade resultado = (Entidade) consulta.uniqueResult(); return resultado; } catch (RuntimeException erro) { throw erro; } finally { sessao.close(); } } public void excluir(Entidade entidade) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); Transaction transacao = null; try { transacao = sessao.beginTransaction(); sessao.delete(entidade); transacao.commit(); } catch (RuntimeException erro) { if (transacao != null) { transacao.rollback(); } throw erro; } finally { sessao.close(); } } public void editar(Entidade entidade) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); Transaction transacao = null; try { transacao = sessao.beginTransaction(); sessao.update(entidade); transacao.commit(); } catch (RuntimeException erro) { if (transacao != null) { transacao.rollback(); } throw erro; } finally { sessao.close(); } } public void merge(Entidade entidade) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); Transaction transacao = null; try { transacao = sessao.beginTransaction(); sessao.merge(entidade); transacao.commit(); } catch (RuntimeException erro) { if (transacao != null) { transacao.rollback(); } throw erro; } finally { sessao.close(); } } } meu dao:
      package br.pro.silvio.prati.dao; import br.pro.silvio.prati.domain.Area; public class AreaDAO extends GenericDAO<Area>{ } meu bean:
      package br.pro.silvio.prati.bean; import java.io.Serializable; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.event.ActionEvent; import org.omnifaces.util.Messages; import br.pro.silvio.prati.dao.AreaDAO; import br.pro.silvio.prati.domain.Area; @SuppressWarnings("serial") @ManagedBean @ViewScoped public class AreaBean implements Serializable { private Area area; private List<Area> areas; public Area getArea() { return area; } public void setArea(Area area) { this.area = area; } public List<Area> getAreas() { return areas; } public void setAreas(List<Area> areas) { this.areas = areas; } @PostConstruct public void listar() { try { AreaDAO areaDAO = new AreaDAO(); areas = areaDAO.listar(); } catch (RuntimeException erro) { Messages.addGlobalError("Ocorreu um erro ao tentar listar as AREAS"); erro.printStackTrace(); } } public void novo() { area = new Area(); } public void salvar() { try { AreaDAO areaDAO = new AreaDAO(); areaDAO.merge(area); novo(); areas = areaDAO.listar(); Messages.addGlobalInfo("Area salvo com sucesso"); } catch (RuntimeException erro) { Messages.addGlobalError("Ocorreu um erro ao tentar salvar a AREA"); erro.printStackTrace(); } } public void excluir(ActionEvent evento) { try { area = (Area) evento.getComponent().getAttributes().get("areaSelecionado"); AreaDAO areaDAO = new AreaDAO(); areaDAO.excluir(area); areas = areaDAO.listar(); Messages.addGlobalInfo("Estado removido com sucesso"); } catch (RuntimeException erro) { Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o estado"); erro.printStackTrace(); } } public void editar(ActionEvent evento){ area = (Area) evento.getComponent().getAttributes().get("areaSelecionado"); } } meu xhtml:
      <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Are</title> </h:head> <h:body> <p:growl id="mensagem" /> <h:form id="formListagem"> <p:panel header="AREA - Listagem"> <p:dataTable id="tabela" emptyMessage="Nenhum registro encontrado." paginator="true" value="#{areaBean.areas}" var="item" rows="8"> <f:facet name="header"> <p:commandButton value="Novo" oncomplete="PF('dialogo').show();" actionListener="#{areaBean.novo}" update=":formCadastro:painel"> <f:actionListener type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" /> </p:commandButton> </f:facet> <p:column headerText="Código" sortBy="#{item.codigo}" filterBy="#{item.codigo}"> <h:outputText value="#{item.codigo}" /> </p:column> <p:column headerText="Descricao" sortBy="#{item.nome}" filterBy="#{item.nome}"> <h:outputText value="#{item.nome}" /> </p:column> <p:column headerText="Status" sortBy="#{item.status}" filterBy="#{item.status}"> <h:outputText value="#{item.status}" /> </p:column> <p:column headerText="Cadastrado por" sortBy="#{item.cadpor}" filterBy="#{item.cadpor}"> <h:outputText value="#{item.cadpor}" /> </p:column> <p:column headerText="Data" sortBy="#{item.datcad}" filterBy="#{item.datcad}"> <h:outputText value="#{item.datcad}"> <f:convertDateTime locale="pt_BR" /> </h:outputText> </p:column> <p:column headerText="Hora"> <h:outputText value="#{item.hora}" /> </p:column> <p:column headerText="Opções"> <p:commandButton icon="ui-icon-trash" actionListener="#{areaBean.excluir}" update=":mensagem :formListagem:tabela"> <p:confirm header="Confirmação" message="Deseja excluir 'AREA'?" icon="ui-icon-alert" /> <f:attribute name="areaSelecionado" value="#{item}" /> </p:commandButton> <p:commandButton icon="ui-icon-pencil" actionListener="#{areaBean.editar}" update=":formCadastro:painel" oncomplete="PF('dialogo').show();"> <f:attribute name="areaSelecionado" value="#{item}" /> <f:actionListener type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" /> </p:commandButton> </p:column> </p:dataTable> <p:confirmDialog global="true" showEffect="fade" hideEffect="fade"> <p:commandButton value="Sim" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" /> <p:commandButton value="Não" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" /> </p:confirmDialog> </p:panel> </h:form> <p:dialog header="AREA - Cadastro" widgetVar="dialogo" draggable="false" resizable="false" modal="true" closable="false"> <h:form id="formCadastro"> <h:panelGrid id="painel" columns="2"> <p:outputLabel value="Descrição:" /> <p:inputText maxlength="30" size="20" value="#{areaBean.area.nome}" required="true" requiredMessage="O campo Descricao é obrigatório!" /> <p:outputLabel value="Situação:" /> <p:selectOneMenu value="#{areaBean.area.status}" required="true" requiredMessage="O campo Situacao é obrigatório!"> <f:selectItem itemValue="" itemLabel="Selecione.." /> <f:selectItem itemValue="Ativo" itemLabel="Ativo" /> <f:selectItem itemValue="Inativo" itemLabel="Inativo" /> </p:selectOneMenu> </h:panelGrid> <h:panelGrid columns="2"> <p:commandButton value="Salvar" actionListener="#{areaBean.salvar}" update=":mensagem :formCadastro:painel :formListagem:tabela" /> <p:commandButton value="Fechar" oncomplete="PF('dialogo').hide();" /> </h:panelGrid> </h:form> </p:dialog> </h:body> </html> ele grava de boa a data e a hora , mas quando é pra atualizar, só atualiza outros campos mas não a data e a hora. o que pode ser?
    • By Michel DS
      Olá a todos, estou implantando uma aplicação em java usando JPA e Hibernate, estou com um problema no arquivo persistence, esse arquivo possui uma chamada para links externos no começo: 
       
      <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> O problema é que minha aplicação irá rodar em uma rede offiline, quando testo na rede ele não funciona por conta dessas dependências externa, minha pergunta é se existe algum meio de usar esse arquivo offiline?
      Desde já agradeço ao fórum. 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.