estou estudando hibernate a algum tempo, e vi que o framework é otimo, porem, pra mim ainda e complicadio.
Minha duvida é a seguinte:
Tenho 1 tabela funcionario e outra colaboracao
Quero criar a tabela funcionario, e tambem criar uma relacao entre as 2, de modo que ao preencher a tabelas funcionari, a tabela colaboracao tb possa ser preenchida.
Primeiro, hibernate é complicado sim, mas não por que ele foi criado para ser e sim por que a maioria esquece que ele une vários conceitos, dos quais, dois são os principais, orientação a objetos e programação estruturada.
Como assim?
Os bancos de dados relacionais, como o MySQL, Oracle, MS SQL Server e Postgres usam conceitos estruturados. Enquanto que o java se baseia em OO. É esse o ponto de divergência.
Enfim, você pode relacionar duas tabelas, A e B de três formas:
Cada registro em A possui um e apenas um correspondente em B (relacionamento 1 : 1)
Cada registro em A possui vários correspondentes em B (relacionamento 1 : N)
Cada registro em A irá possuir vários registros em B e, por sua vez, cada registro de B possuirá vários registros em A (relacionamento N : N).
Assim sendo, primeiro você precisa definir qual a relação entre as classes (1 : 1, 1 : N ou N : N) e, então, poderemos te ajudar melhor.
Se você está estudando Hibernate, deve estar lendo um livro sobre o assunto ou então o próprio manual de referencia que vem com ele quando você baixa as bibliotecas.
No manual tem exemplo de como mapear os relacionamentos citados pelo drsmachado, na resposta acima. Da uma olhada lá. Eu mesmo uso o Hibernate desde 2009 quando comecei no Java, e sempre acabo tirando uma dúvida ou outra até hoje no manual de referencia do framework.
Declarei OneToMany porque para 1 funcionario quero ter Varias colaboracoes. Declarei como cascade all para que o proprio hibernate faça a insercao dos dados da tabela colaboracao, a partir de funcionario.
O Fetch.JOIN é para ser através de JOINS.
O @JoinColumn(name=“id_funcionario”) é para dizer que id_funcionario é a chave estrangeira.
Um funcionário tem muitas colaborações? Então vai precisar trocar o atributo simples colaboracao por uma coleção destes (Collection, List ou Bag), caso contrário, haverá exceção.
Pense assim, se um funcionario pode ter varias colaborações, você vai precisar armazenar essa colaborações em um objeto funcionario, então, vai precisar de uma coleção para armazenar em um funcionario, varias colaborações.
Agora na classe Colaboracao, cada colaboração pertence a um único usuário então terá que ter um atributo simples do tipo Funcionario.
Se você tem um relacionamento 1-N, vai ter que trabalhar com coleções, é dessa forma que o Hibernate trabalha. Porque o tipo de mapeamento exige que seja uma coleção.