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.
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:
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);
}
}
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:
package sgia.enums;
public enum TipoCadastro {
CLIENTE, FUNCIONARIO, FORNECEDOR
}
con.setParam(7, p.getTipoCadastro().toString());
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.
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;
}
}
}
con.setInt(7, p.getTipoCadastro().getId());
TipoCadastro c = TipoCadastro.porId(rs.getInt("tipoCadastro"));
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 =)