Enum e JDBC!

Estou com uma duvida, nao estou conseguindo fazer funcionar as minhas classes Enum usando JDBC,
os classes Enums funcionam normalmente usando o JDBC ou só com o JPA?

Obrigado.

Poderia ser mais claro um pouco no problema que você está encontrando? Pois me parece algo simples, dependendo da forma como tu estás persistindo o enum.

Na verdade me parece simples até independente da forma, pois se for um relacionamento um para um com uma outra entidade e o enum for uma coluna numa tabela, tu simplesmente pega o valor da coluna e gera o enum especifico:

[code]
enum Apple {
A, B, C, D, E
}

public class MainClass {
public static void main(String args[])
{
Apple ap;

System.out.println("Here are all Apple constants"); 

Apple allapples[] = Apple.values(); 
for(Apple a : allapples) 
  System.out.println(a); 

System.out.println(); 

ap = Apple.valueOf("C"); 
System.out.println("ap contains " + ap); 

}
}[/code]

Só um exemplo que eu peguei da internet onde usam o valueOf para gerar o enum desejado. Ali tu substituiria com o valor recuperado da coluna. Para os outros relacionamentos (1 pra n, etc.) seria a mesma coisa…

Isso se o enum estiver com sendo persistido como String, se tiver sendo sendo persistido como número daí vai ter q tratar um pouco diferente, mas nada demais tb…

Na verdade nem sei se é o enum msm a causa do problema, deu um erro aqui que eu nao sei qual é, achei que pudesse ser o enum, no sistema ta assim:

criei uma classe enum:

[code]package sgia.enums;

public enum TipoCadastro {
CLIENTE, FUNCIONARIO, FORNECEDOR
}
[/code]

e na hora da inserção eu tratei o enum da seguinte forma:

assim esta correto?

É mas fácil vc colar o erro ai.

Você tem algumas possibilidades.

  1. Gravar o name() do enum. Não gosto disso pq complica o refactoring;
  2. Gravar o ordinal do enum. Acho ainda pior que gravar o name();
  3. Criar um campo ID para seu enum. Acho a melhor opção.

Aí fica assim:

[code]
public enum TipoCadastro {
CLIENTE(1), FUNCIONARIO(2), FORNECEDOR(3);

private int id;

private TipoCadastro(int id) {
this.id = id;
}

public int getId() { return id; }
public static TipoCadastro porId(int id) {
for (TipoCadastro c : values()) {
if (c.getId() == id) return c;
return null;
}
}
} [/code]

Aí vc salva só o ID no JDBC:

E carrega assim:

O id pode parecer redundante com o ordinal, mas não é. Você com o tempo, você pode decidir apagar um item do enum, ou incluir um no meio, e aí a ordem dos demais irá mudar, mas o ID não.

tem como eu declarar uma variavel em uma classe enum?

da erro nessa declaração de variavel :x

Tem sim.

Que erro?

Consegui resolver cara, brigado =)