Fala ai galera, tudo certinho??
Bom, ja fazem 3 noites que eu estou passando em claro pra tentar resolver um problema e não obtive êxito, então resolvi vir aqui pedir ajuda de vcs.
Meu problema é bem estranho, vou tentar colocar bem detalhado o que ta passando pra que vcs possam me ajudar.
Vamos la… tenho os seguintes relacionamentos. Tenho uma tabela TB_MODULO com campos (ID_MODULO, DESCRICAO, …), e tenho outras duas tabelas
TB_USUARIO (ID_USUARIO, ID_PERFIL, ID_MODULO, …),
TB_PERFIL (ID_PERFIL, ID_MODULO)
Ou seja, as duas tabelas são relacionadas a um determinado módulo, e a tabela TB_USUARIO esta relacionada a um perfil.
Usando o gerador de entidades do NetBeans e do Eclispe, ambos me geram o seguinte mapeamento. Lembrando que estou usando mapeamentos Bidirecionais
TB_MODULO:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "modulo", fetch = FetchType.LAZY)
private Collection<Usuario> usuarioCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "modulo", fetch = FetchType.LAZY)
private Collection<Perfil> perfilCollection;
//Demais mapeamentos
TB_PERFIL:
@Id
@Basic(optional = false)
@Column(name = "ID_PERFIL")
private BigDecimal idPerfil;
@Id
@Basic(optional = false)
@Column(name = "ID_MODULO")
private BigDecimal idModulo;
@JoinColumn(name = "ID_MODULO", referencedColumnName = "ID_MODULO", insertable = false, updatable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Modulo modulo;
//Demais mapeamentos
TB_USUARIO:
@Id
@Basic(optional = false)
@Column(name = "ID_USUARIO")
private BigDecimal idUsuario;
@Id
@Basic(optional = false)
@Column(name = "ID_MODULO")
private BigDecimal idModulo;
@JoinColumns({
@JoinColumn(name = "ID_PERFIL", referencedColumnName = "ID_PERFIL"),
@JoinColumn(name = "ID_MODULO", referencedColumnName = "ID_MODULO", insertable = false, updatable = false)})
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Perfil perfil;
@JoinColumn(name = "ID_MODULO", referencedColumnName = "ID_MODULO", insertable = false, updatable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Modulo modulo;
//Demais mapeamentos
Com isso, minha aplicação funciona perfeitamente, quando faço buscas em usuário, ele traz o perfil associado, se busco por módulo ele tambem traz os seus respectivos usuários e perfis, se
busco por perfil ele traz todos os usuários associados aquele perfil ta funcionando certinho, o problema é: Não estou conseguindo persistir ou atualizar um novo usuário, acusa um erro
Olhando no sql de insert que é gerado, (lembrando que fiz os testes tanto com Hibernate quanto com TopLink) ele não seta na query o campo ID_PERFIL para ser persistido, vejam:
para não deixar dúvida, vou postar tambem o trecho do código onde carrego os dados do usuário pra ser persistido.
Perfil perfil = (Perfil) meuPerfilSelecionado //Antes que perguntem, sim.. os dados do perfil estão sendo carregados
Usuario usuario = new Usuario ();
usuario.setIdUsuario(1);
usuario.setIdModulo(1); //Tambem existe o múdulo 1
usuario.setPerfil(perfil);
usuario.setDsUsuario("usuario");
usuario.setDsPassword("****");
usuario.setDsLogin("login");
Bom pessoal, postei esse trecho de código só pra terem noção de como estou fazendo, mais o problema não esta no modo de carregar os dados e nem de persistir, acredito que o problema
esta em algum mapeamento nos relacionamentos das tabelas, penso eu que o “@JoinColumns” na tabela de usuário que faz relação a de perfil, não esta agindo como deveria agir. Como falei,
pra consultas, esta perfeito, funciona normal, porém não consigo persistir ou atualizar nenhum usuário por ele não associar o ID_PERFIL da tabela de usuário com a de perfil, e como ele faz parte da chave composta de usuário, claro que vai dar erro. Agora a questão é: porque essa associação não esta sendo feita, alguém pelo amor de Deus poderia me ajudar?
Desde já agradeço a todos.
Abraços