How to save the custom name of an enum in the database?

0

I have an Enum TipoPessoa that has LEGAL person and PHYSICAL person. I created a custom (Legal) and (Physical) name. I am getting the custom name to appear on the screen, but in the database you are saving the variable of the LEGAL or PHYSICAL enum, but I would like it to save Legal or Physical.

Follow the codes below:

People.java

package com.damasystem.dama.model;

public enum TipoPessoa {

    FISICA("Física"), JURIDICA("Jurídica");

    private String descricao;

    private TipoPessoa(String descricao) {
        this.descricao = descricao;
    }

    public String getDescricao() {
        return descricao;
    }

}

EnumTypeConverter.java

package com.damasystem.dama.converter;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.persistence.EnumType;

@FacesConverter("enumTypeConverter")
public class EnumTypeConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value != null) {
            return EnumType.valueOf(value);
        }
        return null;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value != null && value instanceof EnumType) {
            return ((EnumType) value).name();
        }
        return null;
    }

}

Acquirer.java

package com.damasystem.dama.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "adquirente")
public class Adquirente implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;
    private String razaoSocial;
    private String nomeFantasia;
    private String email;
    private String telefone;
    private String celular;
    private String documentoReceitaFederal;
    private TipoPessoa tipoPessoa;
    private List<Endereco> enderecos = new ArrayList<>();

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(name = "razao_social", nullable = false, length = 100)
    public String getRazaoSocial() {
        return razaoSocial;
    }

    public void setRazaoSocial(String razaoSocial) {
        this.razaoSocial = razaoSocial;
    }

    @Column(name = "nome_fantasia", length = 100)
    public String getNomeFantasia() {
        return nomeFantasia;
    }

    public void setNomeFantasia(String nomeFantasia) {
        this.nomeFantasia = nomeFantasia;
    }

    @Column(nullable = false, length = 100)
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Column(nullable = false, length = 20)
    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    @Column(length = 20)
    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    @Column(name = "documento_receita_federal", length = 20)
    public String getDocumentoReceitaFederal() {
        return documentoReceitaFederal;
    }

    public void setDocumentoReceitaFederal(String documentoReceitaFederal) {
        this.documentoReceitaFederal = documentoReceitaFederal;
    }

    @Enumerated(EnumType.STRING)
    @Column(nullable = false, length = 10)
    public TipoPessoa getTipoPessoa() {
        return tipoPessoa;
    }

    public void setTipoPessoa(TipoPessoa tipoPessoa) {
        this.tipoPessoa = tipoPessoa;
    }

    @OneToMany(mappedBy = "adquirente", cascade = CascadeType.ALL, orphanRemoval = true)
    public List<Endereco> getEnderecos() {
        return enderecos;
    }

    public void setEnderecos(List<Endereco> enderecos) {
        this.enderecos = enderecos;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Adquirente other = (Adquirente) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }


}

cadastroBuy.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:p="http://primefaces.org/ui"
                xmlns:o="http://omnifaces.org/ui"
                template="/WEB-INF/template.xhtml">

    <ui:define name="title">#{cadastroAdquirenteBean.editando ? 'Edição de adquirente' : 'Novo adquirente'}</ui:define>

    <ui:define name="breadcrumb">
        <li>Pages</li>
        <li>/</li>
        <li><p:link outcome="/adquirentes/cadastroAdquirente">Cadastro de adquirente</p:link></li>
    </ui:define>

    <ui:define name="content">
        <f:metadata>
            <o:viewParam name="adquirente" value="#{cadastroAdquirenteBean.adquirente}" />
            <f:event listener="#{cadastroAdquirenteBean.inicializar()}" type="preRenderView" />
        </f:metadata>

        <h:form id="frmCadastroAdquirente">
            <h1>#{cadastroAdquirenteBean.editando ? 'Edição de adquirente' : 'Novo adquirente'}</h1>

            <p:messages autoUpdate="true" closable="true" />

            <p:toolbar style="margin-top: 10px" >
                <p:toolbarGroup>
                    <p:button value="Novo" outcome="/adquirentes/cadastroAdquirente.xhtml" />
                    <p:commandButton id="salvar" value="Salvar" action="#{cadastroAdquirenteBean.salvar}" process="@this" 
                        update=":frmCadastroAdquirente:pnlCadastro :frmCadastroAdquirente:enderecosTable" />
                </p:toolbarGroup>

                <p:toolbarGroup align="right">
                    <p:commandButton value="Enviar por e-mail" process="@this" />

                    <p:button value="Pesquisa" outcome="/adquirentes/pesquisaAdquirente.xhtml" />
                </p:toolbarGroup>
            </p:toolbar>

            <p:panelGrid id="pnlCadastro" columns="2" style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo" >
                <p:outputLabel value="Tipo de Pessoa" for="tipoPessoa" />
                <p:selectOneRadio id="tipoPessoa" value="#{cadastroAdquirenteBean.adquirente.tipoPessoa}" >
                    <f:selectItems value="#{cadastroAdquirenteBean.tiposPessoas}" var="tipoPessoa" 
                        itemLabel="#{tipoPessoa.descricao}" itemValue="#{tipoPessoa}" />
                    <p:ajax event="change" process=":frmCadastroAdquirente:pnlCadastro" update="nomePessoa labelPessoa maskPessoa"/>
                </p:selectOneRadio>

                <h:panelGroup id="nomePessoa">
                    <p:outputLabel value="#{cadastroAdquirenteBean.adquirente.tipoPessoa == 'FISICA' ? 'Nome' : 'Razão Social' }" for="razaoSocial"/>
                </h:panelGroup>
                <p:inputText id="razaoSocial" value="#{cadastroAdquirenteBean.adquirente.razaoSocial}" size="80" maxlength="100" />

                <p:outputLabel for="nomeFantasia" value="Nome Fantasia" />
                <p:inputText id="nomeFantasia" value="#{cadastroAdquirenteBean.adquirente.nomeFantasia}" size="80" maxlength="100" />

                <h:panelGroup id="labelPessoa">
                    <p:outputLabel value="#{cadastroAdquirenteBean.adquirente.tipoPessoa == 'FISICA' ? 'CPF' : 'CNPJ' }" for="documento"/>
                </h:panelGroup>

                <h:panelGroup id="maskPessoa">              
                    <p:inputMask id="documento" mask="#{cadastroAdquirenteBean.adquirente.tipoPessoa == 'FISICA' ? '999.999.999-99' : '99.999.999/9999-99'}" 
                        value="#{cadastroAdquirenteBean.adquirente.documentoReceitaFederal}" />
                </h:panelGroup>

                <p:outputLabel for="email" value="E-mail" />
                <p:inputText id="email" value="#{cadastroAdquirenteBean.adquirente.email}" size="80" maxlength="100" />

                <p:outputLabel for="telefone" value="Telefone" />
                <p:inputText id="telefone" value="#{cadastroAdquirenteBean.adquirente.telefone}" size="20" maxlength="20" />

                <p:outputLabel for="celular" value="Celular" />
                <p:inputText id="celular" value="#{cadastroAdquirenteBean.adquirente.celular}" size="20" maxlength="20" />
            </p:panelGrid>

            <p:commandButton id="addEnderecoAdquirente" value="Adicionar endereço" action="#{cadastroAdquirenteBean.prepararNovoEndereco()}" 
                style="margin-top: 20px"  process="@this" update=":frmCadastroAdquirente:pnlCadastroEndereco"
                oncomplete="PF('inclusaoEndereco').show()" />

            <p:dialog header="Inclusão de endereço" widgetVar="inclusaoEndereco" draggable="false"
                resizable="false" modal="false" minimizable="true" maximizable="true" >

                <h:panelGroup>
                    <h:panelGrid id="pnlCadastroEndereco" columns="2" >
                        <p:outputLabel for="logradouro" value="Logradouro" />
                        <p:inputText id="logradouro" value="#{cadastroAdquirenteBean.endereco.logradouro}" size="100" maxlength="110" 
                            required="true" requiredMessage="Informe o logradouro." />

                        <p:outputLabel for="numero" value="Número" />
                        <p:inputText id="numero" value="#{cadastroAdquirenteBean.endereco.numero}" size="5" maxlength="5" required="true"
                            requiredMessage="Informe o número." />

                        <p:outputLabel for="complemento" value="Complemento" />
                        <p:inputText id="complemento" value="#{cadastroAdquirenteBean.endereco.complemento}" size="40" maxlength="50" />

                        <p:outputLabel for="cep" value="CEP" />
                        <p:inputText id="cep" value="#{cadastroAdquirenteBean.endereco.cep}" size="15" maxlength="20" required="true"
                            requiredMessage="Informe o CEP." />

                        <p:outputLabel value="País" for="pais"/>
                        <p:selectOneMenu id="pais" value="#{cadastroAdquirenteBean.pais}" >
                            <f:selectItem itemLabel="Selecione o país"/>
                            <f:selectItems value="#{cadastroAdquirenteBean.listaPaises}" var="pais"
                                itemValue="#{pais}" itemLabel="#{pais.nome}" />
                            <p:ajax listener="#{cadastroAdquirenteBean.carregarEstados()}" update="estado" />   
                        </p:selectOneMenu>

                        <p:outputLabel value="Estado" for="estado"/>
                        <p:selectOneMenu id="estado" value="#{cadastroAdquirenteBean.estado}" >
                            <f:selectItem itemLabel="Selecione o estado"/>
                            <f:selectItems value="#{cadastroAdquirenteBean.listaEstados}" var="estado"
                                itemValue="#{estado}" itemLabel="#{estado.nome}" />
                            <p:ajax listener="#{cadastroAdquirenteBean.carregarCidades()}" update="cidade" />   
                        </p:selectOneMenu>

                        <p:outputLabel value="Cidade" for="cidade"/>
                        <p:selectOneMenu id="cidade" value="#{cadastroAdquirenteBean.cidade}">
                            <f:selectItem itemLabel="Selecione a cidade"/>
                            <f:selectItems value="#{cadastroAdquirenteBean.listaCidades}" var="cidade"
                                itemValue="#{cidade}" itemLabel="#{cidade.nome}" />
                        </p:selectOneMenu>

                        <p:commandButton value="Incluir" action="#{cadastroAdquirenteBean.incluirEndereco()}" 
                            oncomplete="PF('inclusaoEndereco').hide()" update=":frmCadastroAdquirente:enderecosTable" />
                    </h:panelGrid>
                </h:panelGroup>
            </p:dialog>

            <p:dataTable id="enderecosTable" value="#{cadastroAdquirenteBean.adquirente.enderecos}" var="endereco" 
                style="margin-top: 10px" emptyMessage="Nenhum adquirente encontrado."
                rows="20" paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom" >

                <p:column headerText="Logradouro" style="text-align: left" >
                    <h:outputText value="#{endereco.logradouro}" />
                </p:column>

                <p:column headerText="Número" style="text-align: center; width: 100px" >
                    <h:outputText value="#{endereco.numero}" />
                </p:column>

                <p:column headerText="Complemento" style="text-align: left; width: 120px" >
                    <h:outputText value="#{endereco.complemento}" />
                </p:column> 

                <p:column headerText="CEP" style="text-align: center; width: 80px" >
                    <h:outputText value="#{endereco.cep}" />
                </p:column>

                <p:column headerText="Cidade - Estado - País" style="text-align: left; width: 250px" >
                    <h:outputText value="#{endereco.cidade.nome} - #{endereco.cidade.estado.nome} - #{endereco.cidade.estado.pais.nome}"  />
                </p:column>

                <p:column style="text-align: center; width: 100px" >
                    <p:commandButton icon="ui-icon-pencil" title="Editar" oncomplete="PF('inclusaoEndereco').show()" process="@this"
                        update=":frmCadastroAdquirente:pnlCadastroEndereco" >
                        <f:setPropertyActionListener value="#{endereco}" target="#{cadastroAdquirenteBean.endereco}" />
                    </p:commandButton>
                    <p:commandButton icon="ui-icon-trash" title="Excluir" oncomplete="PF('confirmacaoExclusao').show()" process="@this" >
                        <f:setPropertyActionListener value="#{endereco}" target="#{cadastroAdquirenteBean.enderecoSelecionado}" />
                    </p:commandButton>
                </p:column>
            </p:dataTable>

            <p:confirmDialog header="Exclusão de endereço" message="Tem certeza que deseja excluir o endereço?" 
                widgetVar="confirmacaoExclusao" >
                <p:button value="Não" onclick="PF('confirmacaoExclusao').hide(); return false;" />
                <p:commandButton value="Sim" oncomplete="PF('confirmacaoExclusao').hide()" 
                actionListener="#{cadastroAdquirenteBean.removerEndereco()}" process="@this" 
                update=":frmCadastroAdquirente:enderecosTable" />
            </p:confirmDialog>
        </h:form>
    </ui:define>

</ui:composition>
    
asked by anonymous 07.06.2018 / 03:53

1 answer

0

To solve the problem I used another type of converter:

@Converter(autoApply = true)
public class TipoPessoaConverter implements AttributeConverter<TipoPessoa, String> {

    @Override
    public String convertToDatabaseColumn(TipoPessoa tipoPessoa) {
         switch (tipoPessoa) {
            case FISICA:
                return "Física";

            case JURIDICA:
                return "Jurídica";

            default:
                throw new IllegalArgumentException("Tipo de pessoa [" + tipoPessoa
                        + "] não é suportada.");
         }

    }

    @Override
    public TipoPessoa convertToEntityAttribute(String dbData) {
        switch (dbData) {
        case "Física":
            return TipoPessoa.FISICA;

        case "Jurídica":
            return TipoPessoa.JURIDICA;

        default:
            throw new IllegalArgumentException("Tipo de pessoa [" + dbData
                    + "] não é suportada.");
        }
    }

It worked right.

    
03.09.2018 / 23:38