Problema com @ElementCollection

8 respostas
gnucleber

Boa Noite amigos,

Estou tentando colocar o spring security pra rodar e para isso uso uma classe Usuario e estou querendo fazer um @JoinTable para uma tabela usuario_permissao. A ideia é que possa ter varias permissões como: ROLE_USUARIO e ROLE_ADMINISTRADOR para o mesmo usuario.
Estou usando o Hibernate e seguindo um exemplo usando a annotation @ElementCollection no NetBeans 7.1.2 somente diz que: cannot find symbol, o codigo da classe usuario é:

*/
package financeiro.usuario;
import java.io.*;
import java.util.*;
import javax.persistence.*;

@Entity
public class Usuario implements Serializable{
    @Id
    @GeneratedValue
    private Integer codigo;
    private String nome;
    private String email;
    
    @org.hibernate.annotations.NaturalId
    private String login;
    private String senha;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date nascimento;
    private String celular;
    private String idioma;
    private boolean ativo;

  @ElementCollection(targetClass = String.class)
	@JoinTable(
	           name = "usuario_permissao", 
			     uniqueConstraints = {@UniqueConstraint(columnNames = {"usuario", "permissao"})}, 
			     joinColumns = @JoinColumn(name = "usuario"))
	@Column(name = "permissao", length = 50)
	private Set<String> permissao;

Alguém teria uma sugestão melhor para fazer essa persistencia? Ou saberia me dizer o que esta faltando para o codigo entender o @ElementCollection já que pelo que vi na internet ele faz parte de javax.persistence

abraços.

8 Respostas

Hebert_Coelho

Qual o erro completo?

Hebert_Coelho

Cara, eu olhei na internet aqui e achei exemplo diferente: http://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/ElementCollections .

Nesse e em outros exemplos ele usa @CollectionTable ao invés de JoinTable.

Até onde eu me lembro JoinTable é apenas para ManyToMany e OneToMany unidirecional.

Outros exemplos: http://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/ElementCollections
http://mdshannan1.blogspot.com.br/2010/09/jpa-2-new-feature-elementcollection.html

gnucleber

Olá jakefrog ,

Então, no netbeans ele não identifica essa annotations e quando mando executar, o tomcat mostra a seguinte mensagem de erro:

GRAVE: Error filterStart 08/06/2012 22:47:24 org.apache.catalina.core.StandardContext startInternal GRAVE: Context [/Financeiro] startup failed due to previous errors Criação inicial do objeto SessionFactory falhou. Erro: org.hibernate.MappingException: Could not determine type for: java.util.Set, for columns: [org.hibernate.mapping.Column(permissao)]

Hebert_Coelho

É cara, se ele não reconhece as annotations tem alguma coisa errada.

Veja se a biblioteca sendo utilizada está correta, se é a 2.

gnucleber

Obrigado amigo, vou da uma olhada e rever a versão, vou tentar também montar o mesmo codigo pelo eclipse para ver se é algum outro problema.

abraços.

fabreder

Olá amigo,

Também estou estudando o mesmo livro e me esbarrei neste problema.
Não sei se já resolveu (provavelmente sim), mas de qualquer forma,
basta fazer a seguinte importação:

import javax.persistence.*;

O eclipse não oferece a opção de importar a classe correta com o código
escrito daquela forma. Então, importe tudo e o problema se resolve!

Espero ter ajudado a alguém,

Abraços,
Fábio

A

Caro fabreder,

Eu também estou lendo o mesmo livro.Fiz o que você recomendou e dá o mesmo problema.

Alguma solução a mais pode ser aplicada?

T

Prezado gnucleber, sei que já se passaram alguns anos de sua dúvida, mas(suposição minha) ao ler o mesmo livro e fazer o mesmo exemplo que você, me deparei com o mesmo problema. Não sei qual IDE você está utilizando, eu estou usando o netbeans e resolvi esse problema ao importar o JPA(2.0) para o projeto!

Criado 8 de junho de 2012
Ultima resposta 2 de jul. de 2015
Respostas 8
Participantes 5