Salvar enum no banco a partir de determinado numero

Pessoa, estou tentando fazer um enum em java, porém preciso que salve no banco a partir da lista que defeni, com seu numero, mas no banco esta salvando a partir do zero, gostaria de saber se tem como salvar do tipo que criei. Segue o código

public enum TipoVinculo {

COMPROMISSÁRIO(3, "Compromissário"),
ESTUDA(4, "Estuda"),
LOCATÁRIO(5, "Locatário"),
MIGRANTE(6, "Migrante"),
PROPRIETÁRIO(2, "Proprietário"),
TRABALHA(1, "Trabalha");


@Enumerated(EnumType.ORDINAL)
public int id;
public String descricao;

private TipoVinculo(int id, String descricao) {
    this.id = id;
    this.descricao = descricao;
}

@Override
public String toString() {
    return descricao;
}

public String getDescricao() {
    return descricao;
}

public int getId() {
    return id;
    }   
}

No caso esta desse jeito porque quero mostra a descrição e tem que ser em ordem alfabética, mas tipo o compromissario teria que gravar 3 no banco, mas esta gravando como 0. Alguém sabe a solução ?

Boa tarde Leandro,

Acredito que o problema está relacionado ao lugar onde vc está disponibilizando esse enum.

Poderia postar a classe ou entidade aonde será utilizado?

Att.,

Ok. A classe onde estou chamando ele na classe

package br.com.eddydata.entidade.rechidrico;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Leandro
 */
@Embeddable
public class PessoaImovelPK implements Serializable{
    
    @Column(name = "id_pessoa")
    private Integer idPessoa;

@Column(name = "id_imovel")
private Integer idImovel;

@Column(name = "id_exercicio_pk")
private Integer idExercicio;

@Column(name = "tipo_vinculo")
private TipoVinculo tipoVinculo;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "data_vinculo")
private Date dataVinculo;

public Integer getIdPessoa() {
    return idPessoa;
}

public void setIdPessoa(Integer idPessoa) {
    this.idPessoa = idPessoa;
}

public Integer getIdImovel() {
    return idImovel;
}

public void setIdImovel(Integer idImovel) {
    this.idImovel = idImovel;
}

public Integer getIdExercicio() {
    return idExercicio;
}

public void setIdExercicio(Integer idExercicio) {
    this.idExercicio = idExercicio;
}

public TipoVinculo getTipoVinculo() {
    return tipoVinculo;
}

public void setTipoVinculo(TipoVinculo tipoVinculo) {
    this.tipoVinculo = tipoVinculo;
}

public Date getDataVinculo() {
    return dataVinculo;
}

public void setDataVinculo(Date dataVinculo) {
    this.dataVinculo = dataVinculo;
}
    
@Override
public int hashCode() {
    int hash = 7;
    hash = 53 * hash + Objects.hashCode(this.idPessoa);
    return hash;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final PessoaImovelPK other = (PessoaImovelPK) obj;
    if (!Objects.equals(this.idPessoa, other.idPessoa)) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "PessoaImovelPK{" + "idPessoa=" + idPessoa + '}';
}    
}

No atributo tipoVinculo vc deve colar a anotação @Enumerated(EnumType.ORDINAL), retirando ela do enum criado antes, pois assim a entidade gravará no banco a posição ordinal que vc colocou no enum. Teste assim e veja se funciona.

Att.,

c.rangel, fiz como vc falou, porem continua, gravando no banco na ordem começando do zero

Ola, tive esse mesmo problema, resolvi com esse link (no post 7) existe um metodo parse que faz esse trabalho de conversão. link

Credito para @fpierin

Ok. Obrigado Eduardo_Maranata10, fiz de acordo com o link e consegui, porém quando eu fazia uma alteração ou uma cadastro para null ele estava retornando zero no banco e não nulo, ai em vez de int passei para Integer e funcionou perfeito. O código ficou assim.

public enum TipoVinculo {

COMPROMISSÁRIO(3, "Compromissário"),
ESTUDA(4, "Estuda"),
LOCATÁRIO(5, "Locatário"),
MIGRANTE(6, "Migrante"),
PROPRIETÁRIO(2, "Proprietário"),
TRABALHA(1, "Trabalha");

public Integer id;
public String descricao;

private TipoVinculo(Integer id, String descricao) {
    this.id = id;
    this.descricao = descricao;
}

  public String getDescricao() {
    return descricao;
}

public Integer getId() {
    return id;
}

public static TipoVinculo parse(Integer id){
    TipoVinculo tipoVinculo = null;
    for(TipoVinculo item : TipoVinculo.values()){
        if(Objects.equals(item.getId(), id)){
            tipoVinculo = item;
            break;
        }
    }
    return tipoVinculo;
}



@Override
public String toString() {
    return this.descricao;
}

}

e na classe que chama o enum ficou assim:

 @Column(name = "tipo_vinculo")
    private Integer tipoVinculo;

 public TipoVinculo getTipoVinculo() {
        return TipoVinculo.parse(this.tipoVinculo);
    }

public void setTipoVinculo(TipoVinculo tipoVinculo) {
    if(tipoVinculo!=null){
        this.tipoVinculo = tipoVinculo.getId();
    }else{
        this.tipoVinculo = null;
    }
}
1 curtida

Fico feliz por ter ajudado, qualquer coisa estamos aqui, vou levar em consideração a sua mudança para o meu código, Abraço