Tive alguns problemas, por isso resolvi criar um tópico para tratar desse assunto.
Para gravar enumeradores num campo varchar, consulte o link: https://www.hibernate.org/265.html
Para gravar enumeradores num campo int, segue a anotação:
@Enumerated(EnumType.ORDINAL)
public Tipo getTipo() {
return tipo;
}Já para gravar uma lista de enumeradores na tabela, é preciso inserir a seguinte anotação:
@CollectionOfElements(fetch=FetchType.LAZY)
@JoinTable(name = "tabelaTipo", joinColumns = @JoinColumn(name = "id_tabelaDestino"))
@Column(name="campoTipo")
public List<Tipo> getListaTipo() {
if (listaTipo == null){
listaTipo = new ArrayList<Tipo>();
}
return listaTipo;
}Nesse caso, será gravado o objeto em questão e a lista dos tipos na tabela “tabelaTipo” referenciando o objeto em questão na coluna “id_tabelaDestino” contendo o número correspondente ao tipo na coluna "campoTipo".
É isso aí, pessoal!
Qualquer dúvida, sugestão ou elogio, comente.
Abraços!!!
Como você mapeou no hibernate.cfg.xml ?
ResponderExcluirPorque eu continuo pegando esse erro aqui:
Could not determine type for: java.util.List, at table: Usuario, for columns: [org.hibernate.mapping.Column(tipoUsuario)]
E no xml está:
Na classe Usuário ficou deste tipo:
@CollectionOfElements(fetch=FetchType.LAZY)
@JoinTable(name = "tipoUsuario", joinColumns = @JoinColumn(name = "cd_tipoUsuario"))
@Column(name="tp_tipoUsuario")
tipoUsuario = tabela que contem o ENUM
cd_tipoUsuario = campo da tabela tipoUsuario que contem o ID
tp_tipoUsuario = campo da tabela Usuario que deveria conter as chaves estrangeiras do tipoUsuario
OBS: se eu não utilizar List eu consigo fazer.. usando apenas 1 tipoUsuario por cada Usuario, porém se eu crio o Enum com List dai da pau.
Se puder me ajudar agradeço
Olá, Thiago!
ResponderExcluirFiz um exemplo igual ao que você está precisando:
@Entity
public class Usuario {
private List<TipoUsuario> listaTipoUsuario;
//...Outros atributos
@CollectionOfElements(fetch=FetchType.LAZY)
@JoinTable(name = "tipoUsuario", joinColumns = @JoinColumn(name = "idUsuario"))
@Column(name="tipoUsuario")
public List<TipoUsuario> getListaTipoUsuario() {
if (listaTipoUsuario == null){
listaTipoUsuario = new ArrayList<TipoUsuario>();
}
return listaTipoUsuario;
}
}
public enum TipoUsuario {
BASICO,
INTERMEDIARIO,
AVANCADO;
}
//Mapeamento no hibernate.cfg.xml
//Não precisa mapear o enumerador
<mapping class="br.com.teste.www.entidade.Usuario"/>
//Código de criação das tabelas
CREATE TABLE `tipoUsuario` (
`id` int(10) AUTO_INCREMENT,
`idUsuario` int(10),
`tipoUsuario` tinyint(3) ,
PRIMARY KEY (`id`)
)
CREATE TABLE `Usuario` (
`id` int(10) AUTO_INCREMENT,
//... Outros campos
PRIMARY KEY (`id`)
)
Muito bom
ResponderExcluirMuito bom!
Fiz de outra forma, mas foi bem parecido.
No meu caso, tenho uma classe Filme que terá uma lista de enum de idiomas para o áudio.
@CollectionOfElements(fetch = FetchType.LAZY)
@JoinTable(name = "Filme_Idioma", joinColumns = @JoinColumn(name = "filme"))
@Column(name = "idioma")
@Enumerated(EnumType.STRING)
public List getAudio() {
return audio;
}