Hibernate-annontations + Map

3 respostas
SadNess

galera
to com dificultades em como fazer o mapeamento de uma classe minha aqui

eu tenho uma classe que tem apenas um atributo, que é um map, com uma chave String e um Enum como valor

classe 1:

@Embeddable
public class ListaDeSublistas implements Serializable {
	
	@CollectionOfElements
	private Map<String, SubLista> sublistas;
	
	public ListaDeSublistas()	{
		sublistas = new HashMap<String, SubLista>();
	}
	
	public SubLista get(String sublista)	{
		return sublistas.get(sublista);
	}
	
	public void add(SubLista sublista)	{
		sublistas.put(sublista.toString(), sublista);
	}
}

enum:

public enum SubLista implements Serializable {
    
	DISQUETE_CONSULTA("Disquete Consulta FCC"),
	LISTA_ALFA_COLEGIO("Lista alfa colégio"),
	LISTA_ALFA_POSTO("Lista alfa posto"),
	LISTA_CADASTRO("Lista de Cadastro (Alfa geral)"),
	LISTA_PRESENCA("Lista de presenca com espaço para assinatura"),
	LISTA_SALA_DUPLO_LINGUA("Lista de sala - fomato duplo (c/ mist. de língua)"),
	LISTA_SALA_DUPLO_HORARIO("Lista de sala - formato duplo (com horário)"),
	LISTA_SALA_SIMPLES("Lista de sala - formato simples"),
	RELATORIO_INSCRICAO("Relatório com nº de inscrição e tipo de prova"),
	RELATORIO_RESERVA_PROVAS("Relatório de reserva de provas");
	
	private final String descricao;
	private String especificacao;
	
	SubLista(String descricao)	{
		this.descricao = descricao;
	}
	
	public String getEspecificacao() {
		return especificacao;
	}
	public void setEspecificacao(String especificacao) {
		this.especificacao = especificacao;
	}
}

dei uma pesquisada, mas não estou descobrindo que anotações eu preciso pra esse map, na verdade nunca mapeei um Map antes
alguém pode me ajudar?

3 Respostas

bland

Mas esse seu Enum está persistido na sua base de dados?
Como você está persistindo essa informação do Enum?

Abraço.

SadNess

então cara
essa é uma das minhas dúvidas
eu nunca persisti um enum assim antes, só de um jeito + simples
segue a última classe do meu sistema

@Entity(name = "LISTAS_LISTA_CADASTRO")
public class ListaCadastro implements Serializable {
	
	public enum TpProva {OBJETIVA, PRATICA, OUTRA};
	
	@Id
	private String spi;
	@Enumerated(EnumType.STRING)
	private TpProva tpProva;
	private String dtCriacao;
	private String dtNecessidade;
	@Column(length=2000)
	private String dsOutros;
	@Column(length=2000)
	private String observacao;
	@Embedded
	private ListaDeSublistas sublistas;
	
	public ListaCadastro()	{
		sublistas = new ListaDeSublistas();
	}
	
	public void adicionarSublista(SubLista sublista)	{
		sublistas.add(sublista);
	}
	
	public String getSpi() {
		return spi;
	}
	public void setSpi(String spi) {
		this.spi = spi;
	}
	public TpProva getTpProva() {
		return tpProva;
	}
	public void setTpProva(TpProva tpProva) {
		this.tpProva = tpProva;
	}
	public String getDtCriacao() {
		return dtCriacao;
	}
	public void setDtCriacao(String dtCriacao) {
		this.dtCriacao = dtCriacao;
	}
	public String getDtNecessidade() {
		return dtNecessidade;
	}
	public void setDtNecessidade(String dtNecessidade) {
		this.dtNecessidade = dtNecessidade;
	}
	public String getDsOutros() {
		return dsOutros;
	}
	public void setDsOutros(String dsOutros) {
		this.dsOutros = dsOutros;
	}
	public String getObservacao() {
		return observacao;
	}
	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}
}

Nesse caso foi só usar um @Enumerated para o tpProva e tudo certo
Mas o meu enum SubLista tem variáveis de instância e talz
como eu faço com ele? preciso tratar ele com um entity ou o que?

bland

Mas aí somente você, ou a pessoa responsável, para poder definir isso. Se o enum irá para o BD, ou se terá uma tabela específica para o Enum, ou se será por numeração. Enfim, diversas são as possibilidades, e isso impacta na anotação da classe.

Criado 24 de outubro de 2007
Ultima resposta 24 de out. de 2007
Respostas 3
Participantes 2