Criação de relacionamento entre tabelas usando hibernate

Olá pessoal,
bom, estou estudando o spring-security. Pois bem, não estou conseguindo fazer uma tabela de relacionamento n-n automaticamente usando o hibernate. Embora o livro que estou lendo diz que funciona, aqui comigo não funfa. o código é esse:

@Entity
public class Usuario implements Serializable {

	private static final long serialVersionUID = 2471765773806278661L;
	
	@Id
	@GeneratedValue
	private Integer id;
	@org.hibernate.annotations.NaturalId
	private String login;
	private String senha;


	@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 = new HashSet<String>();

Não seria @CollectionTable ao invés de @JoinTable?

E se é uma coleção, pq tem o @Column?

Pois é Herbert.
bom, primeiramente quero parabeniza-lo e dizer que sou fã pelo seu trabalho. Bem, estou fazendo uma aplicação que usa o spring security como vc pode notar. No livro que estou lendo ele coloca exatamente esse código que vc viu. O meu maior problema é: tenho três atores: adm, cliente, empresa, como vou fazer para que quando um deles se logar ter a permissão que compete a cada um? Já que no livro e nas fontes na internet cria apenas duas tabelas usuario e usuario_permissão e na minha aplicação eu tenho campos específicas nas três classes. Tó rachando a cuca e ainda não entendi como fazer isso.

[quote=cicero.java]Pois é Herbert.
bom, primeiramente quero parabeniza-lo e dizer que sou fã pelo seu trabalho. Bem, estou fazendo uma aplicação que usa o spring security como vc pode notar. No livro que estou lendo ele coloca exatamente esse código que vc viu. O meu maior problema é: tenho três atores: adm, cliente, empresa, como vou fazer para que quando um deles se logar ter a permissão que compete a cada um? Já que no livro e nas fontes na internet cria apenas duas tabelas usuario e usuario_permissão e na minha aplicação eu tenho campos específicas nas três classes. Tó rachando a cuca e ainda não entendi como fazer isso.[/quote]Valeu pelo apoio.

Com o código que eu passei, o hibernate não criou a tabela??

Aconteceu comigo a mesma coisa, mas no livo Java para web o autor diz que dessa forma será criada uma tabela usuário_permissão. Pela sua experiência o que vc me aconselharia a fazer? Neste exato momento estou lendo no seu site para entender a ligação entre a tabela usuario, usuario_permissão e as minhas outras três: http://uaihebert.com/aplicacao-web-completa-angular-twitter-bootstrap-spring-mvc-data-e-security/5/. Que por sinal é 10.

<intercept-url pattern="/" access="ROLE_ADMIN"/>
<intercept-url pattern="/restrito/**" access="ROLE_USUARIO"/>
<intercept-url pattern="/restrito/**" access="ROLE_EMPRESA"/>

como eu faria para buscar o login e permissões desses usuários acima.

VocÊ não chama. É o próprio spring security que fará isso por você.

Usando o collection table do modo que eu te passei, o hibernate já criará a tabela (caso ele já esteja fazendo isso).

Depois, basta você alterar a consulta do banco de dados. Essa consulta você deve ter configurado em um arquivo xml.

O meu problema é que eu tenho três atores no sistema: admin, cliente e empresa. A pergunta é: como vou montar as queries no arquivo applicationContext do spring-security. Já que eu tenho que ter uma relacionamento entre usuario e permissão -> usuario_permissao, só que no meu sistema eu não tenho a tabela usuario e sim admin, cliente e empresa.

[quote=cicero.java]O meu problema é que eu tenho três atores no sistema: admin, cliente e empresa. A pergunta é: como vou montar as queries no arquivo applicationContext do spring-security. Já que eu tenho que ter uma relacionamento entre usuario e permissão -> usuario_permissao, só que no meu sistema eu não tenho a tabela usuario e sim admin, cliente e empresa.[/quote]Cara, desculpe mas não estou entendendo o que você quer.

Crie as tabelas na mão, e faça a csonulta então. Uma vez que a consulta está pronta, você coloca no arquivo do spring.

Você precisa entender o modelo que você quer aplicar usar, no caso, até mesmo antes de usar o hibernate.