Hibernate ManyToMany e chave composta

2 respostas
jingle

Olá estou com probleminha aqui... gostaria de fazer um relacionamento ManyToMany porém minha tabela de relacionamento tem outras informaçoes além dos dois id de relacionamento e estou com problema quanto a isso.

Estou fazendo assim: Usuario
@Entity
@Component
public class Usuario implements Serializable {
//..campos do usuario

//o cascade type precisa ser all pq preciso remover/inserir na tabela PermissaoUsuario sempre que for salvar usuario.
	@OneToMany(mappedBy = "usuario", targetEntity = PermissaoUsuario.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<PermissaoUsuario> permissoesUsuario;

//gets/sets
}
UsuarioPermissao
@Table(name = "permissao_usuario")
@Entity
@Component
public class PermissaoUsuario extends DefaultModel implements Serializable {
	private static final long serialVersionUID = 4231479231876850717L;

        //merda ta aqui... n poderia ter esse id o id teria que ser Permissao + usuario
	@Id
	@SequenceGenerator(name = "sequence", sequenceName = "seq_permissao_usuario")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "sequence")
	private Long id;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "permissao_id", nullable = false)
	private Permissao permissao;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "usuario_id", nullable = false)
	private Usuario usuario;

	@NotEmpty
	@Column(nullable = false, length = 1)
	private String status;
//gets/sets

desse modo que esta... toda vez que salvo um usuario ele adiciona uma nova row na PermissaoUsuario (mesmo quando ja existe um usuario com a permissao), e nao esta removendo quando mando null.

2 Respostas

T

vamo lá…

do jeito que vc quer fazer, ManyToMany… cada vez que vc salvar o usuario, vai salvar lá mesmo…

Você quer como?

Um usuário tenha um unico registro na tabela usuarioPermissao? E caso você selecione este usuario denovo e seta outra permissão pra ele, simplesmente dá um update nessa tabela UsuarioPermissao?

jingle

assim minha intençao era mandar uma lista de usuarioPermissao e quando eu estiver incluindo o usuario ele já inclua essa lista no banco… mesmo ser para se eu alterar essa lista no objeto e mandar alterar o usuario ele tem que incluir os registro que foram adicionado a lista e remover os que não tão mais nela.

antes funcionava direitinho pq eu fazia o manytomany sem mapear a tabela de relacionamento (pq nao tinha outras informaçoes nessa tabela além do id do usuario e do id da permissao, mas agora tem a porcaria do status)

abraço.

Criado 9 de junho de 2010
Ultima resposta 10 de jun. de 2010
Respostas 2
Participantes 2