Ajuda @JoinTable + anotações

12 respostas
joaolenosi

estou tentando criar uma tabela usando notações, porem ele não estar sendo criada!

aqui é minha notação:

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

Alguem sabe o que ha de errado?

12 Respostas

Hebert_Coelho

Cara, ñ duplique seus posts: http://www.guj.com.br/java/277522-criacao-de-tabela-com-hibernate-

Isso apenas atrapalha o forum e as pessoas que irão te ajudar.

joaolenosi

jakefrog, minha intenção não foi duplicar o tópico, e sim colocar o nome do tópico, mais coerente com assunto !

Hebert_Coelho

joaolenosi:
jakefrog, minha intenção não foi duplicar o tópico, e sim colocar o nome do tópico, mais coerente com assunto !
Beleza. da próxima vez edite o post original. Você consegue trocar o título do tópico! [=

joaolenosi

Tranquilo :slight_smile:

mauriciot.silva

vamos do começo…
1° termino de mostra o relacionamento
2° pq vc esta usando elementCollection
3° vc esta dizendo q o elementCollection tera de target um java.lang.String
4° como vc quer q uma String se tranforme em uma entidade??

Se esse attribute seu for um um entidade (@Entity)
entao vc deve usar @ManyToMany
nao tenho muita certeza se funciona tmbm com @OneToMany

da forma q vc fez mas sem ElementCollection

joaolenosi

mauriciot.silva , eu fiz do jeito que o livro diz.

Trecho do livro

O relacionamento entre as tabelas usuario e usuario_permissao já foi exibido na figura 6.5 foi possivel perceber que a tabela
usuario_permissao é muito pequena, tendo apenas dois campos. Na verdade a informação que interessa para a classe usuario é formada apenas
pelo o campo permissão, ou seja apenas um campo.

Essa é uma situação perfeita para não utilizar o mapeamento @OneToMany, e sim o @JoinTable. Esse mapeamento criará diretamente uma lista
de nomes de permissão na classe Usuario e não uma lista de objetos UsuarioPermissao como ocorreria com @OneToMany

fiz igual como o livro ensina:

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

Porem a tabela não foi criada!

Sabe como eu faço pra criar essa tabela no braço ?
tentei da seguinte forma:

create table usuario_permissao (usuario int(11) not null auto_increment primary_key, permissao varchar(255));

Porem como esse meu campo usuario é chave primária, aí eu não posso atribuir mais de uma informação a ele.

joaolenosi

Alguem sabe como seria a tabela, com as mesmas caracteristicas dessa JoinTable?

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

joaolenosi

Ninguem, sabe como eu posso criar a tabela com a mesma estrutura da minha notação ?

joaolenosi

Tentei criar assim, mas não da certo.
Eu gostaria de criar uma tabela que fizesse referencia com a minha tabela usuario, para que eu podesse atribuir mais de uma permissão ao usuario!!

create table usuario_permissao (usuario int(11) not null auto_increment, permissao varchar(255) not null, pimary key(usuario), CONSTRAINT fk_cod_usuario foreign KEY(codigo) references (usuario));
joaolenosi

quando executo o meu projeto, com aquela notação apareçe essa mensagem!

12/07/2012 08:35:49 org.apache.catalina.core.ApplicationContext log INFO: Closing Spring root WebApplicationContext 12/07/2012 08:35:54 org.apache.catalina.core.ApplicationContext log INFO: Initializing Spring root WebApplicationContext 12/07/2012 08:37:21 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/FinanceiroWeb] threw exception [org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update] with root cause com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'financeiro.usuario_permissao' doesn't exist

o que ha de errado com essa notação, que de maneira alguma cria ela no banco ?

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

joaolenosi

ninguem sabe ?

joaolenosi
nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'financeiro.usuario_permissao' doesn't exist

Desisto :cry: :cry:

Criado 11 de julho de 2012
Ultima resposta 12 de jul. de 2012
Respostas 12
Participantes 3