Hibernate: Mapeando Coleção de primitivos: @CollectionOfElements @JoinTable

2 respostas
T

Pessoal estou tendo problemas p/ mapear coleções de tipos primitivos, consultei doc e até outros tópicos aqui do forum, mas oq serviu p/ ele no meu caso não funcionou. Talvez seja por conta de versões do hibernate e jpa, não sei, mas acho q já fiz isso funcionar em outro exemplo. Pois bem tenho uma tabela:

create table t_produtor_org_social(
	id_produtor integer unsigned,
	organizacaoSocial varchar(50),
	foreign key(id_produtor)
		references Produtor(id_produtor)
);

E uma tabela Produtor com o id_produtor com chave.
A classe Produtor:

@SuppressWarnings("serial")
@Entity
public class Produtor implements Serializable{
...
 @CollectionOfElements(targetElement=java.lang.String.class, fetch=FetchType.EAGER)
 @JoinTable(name="t_produtor_org_social", joinColumns= @JoinColumn(name="id_produtor",
referencedColumnName="id_produtor"))
 @Column(name="organizacaoSocial", nullable=false)
 private Set<String> organizacoesSociais;
...

Ao persistir um Produtor a coleção não é persistida, o produtor é inserido sem problemas. Já tentei usar list colcando uma coluna de posicao e tal, mas nada.

ALguém tem alguma dica p/ meu problema.
vlw

2 Respostas

T

Já que ninguém ajudou, vou dar mais uma informação. Quando coloco e as opções de debug para mostrar os SQLs ele da insert em outros relacionamentos e NÃO faz nda no prod_org_social.

Qq dica eh válida.

jadson

Eu já fiz esse tipo de mapeamento para listas de Strings usando XML e Annotations, segue o código;

A classe Java:

@Table(name = "alguma_classe")
public class AlgumaClasse{

         @Id
        private int id;

        @CollectionOfElements(fetch=FetchType.LAZY)
        @JoinTable(name="outra_tabela_para_guardar_os_valores_da_lista", joinColumns= @JoinColumn (name="id_alguma_classe",  referencedColumnName="id"))
        @Column(name="valor")
        private List<String> nomeQualquerDaLista;

}

Pronto você vai precisar cria uma tabela no banco para guardar os valores da lista.

outra_tabela_para_guardar_os_valores_da_lista (id_alguma_classe, valor)

“id_alguma_classe” é a chave estrangeira para a tabela “alguma_classe”

Se você adicionar valores à lista “nomeQualquerDaLista” e salva a classe “AlgumaClasse”, os valores serão salvos também na tabela “outra_tabela_para_guardar_os_valores_da_lista”

Usando XML fica ± assim:

<!-- mapeamento de uma colecao de string -->

                 <list name="nomeQualquerDaLista" lazy="true" table="outra_tabela_para_guardar_os_valores_da_lista">

                        <key column="id_alguma_class"/>

                        <index column="posicao"/>

                        <element type="java.lang.String" column="valor" length="300"/>

                  < / list >

Aqui eu usei o mapeamento de uma lista, com a coluna posicao que guarda a posição do elemento na lista, mas pode ser feito com set, bag ou map.
Neste caso a tabela criada no banco seria: outra_tabela_para_guardar_os_valores_da_lista (id_alguma_classe, posicao, valor)

Espero que ajude, valeu… :wink:

Criado 7 de setembro de 2008
Ultima resposta 30 de out. de 2008
Respostas 2
Participantes 2