Muito para muitos

Boa noite pessoal , estou com uma dificuldade em implementar os relacionamentos muitos para muitos no java ,
no caso eu tenho uma tabela pessoa e outra propriedade e uma intermediaria que é propriedade_pessoa , alguem sabe como eu insiro dados na tabela pessoa , ou na tabela propriedade? Desde ja agradeço , obrigado.

De acordo com os meus conhecimento (=D), há duas formas de implementar Muitos-para-Muitos:

1- Quando não há atributos para a associação. Portanto ela é direta.

public class Aluno {
    private int codigo;
    private List<Materia> materias;
}

public class Materia {
    private int codigo;
    private List<Aluno> alunos;
}

2- Quando há atributos para a associação. Portanto é indireta.

public class Aluno {
    private int codigo;
    private List<AlunoMateria> materias;
}

public class AlunoMateria {
    private Aluno aluno;
    private Materia materia;
    private Time horaAula;
}

public class Materia {
    private int codigo;
    private List<AlunoMateria> alunos;
}

Qualquer coisa posta ai.

Espero ter ajudado. Até.

1 curtida

No meu caso ai eu entro na segunda opção , :slight_smile: você tem algum exemplo mais claro , pq na hora que eu for inserir eu tenho que inserir na tabela intermediaria tb, mas ja ajudo bastante dmarcosm.

Cara… ai vai depender de como você tá fazendo para inserir no banco. Se você estiver usando Hibernate, a inclusão é direta mesmo. Você popula (preenche) uma entidade do tipo AlunoMateria e passa como parâmetro no método “persist”.

Via SQL também é a mesma coisa. A inclusão é feita diretamente na tabela associativa. Monte um SQL de INSERT com os valores que deseja inserir nessa tabela.

Não tem segredo!

Espero ter ajudado. Até.

Mas caso em queira inserir na tabela Materia , tb tenho que enserir na Aluno? estou utilizando jdbc mesmo, obrigado.

Tipo assim… as classes Aluno e Materia são independentes. A modelagem não obriga que você insira alguma coisa em aluno só porque você inseriu algo em matéria e vice-versa.

Se você quer inserir uma matéria nova, não necessariamente eu tenho que ter alunos para ela.
Se você quer inserir um aluno novo, não necessariamente eu tenho que ter matérias para ele.

A única exigência é que, quando você for inserir na classe AlunoMateria, você deve ter um aluno e uma matéria válidas. Caso contrário você vai tomar erro na execução do SQL. Entendeu?! =]

Eu entendi mas vc tem algum exemplo pratico ? Obrigado.

putz eu entendi , mas não estou conseguindo implementar , alguem tem um exemplo de codigo, obrigado.

minha duvida é exatamente como ficaria o dão

É uma duvida que eu tenho tambem, se descobrir a resposta posta aqui. até mais.

Estou desesperado por essa solução? Alguma alma caridosa para me ajudar :frowning:

Jovem não estou entendendo sua dúvida. Não tem segredo. Você vai incluir nessa tabela/classe normalmente, da mesma maneira que você incluiria em qualquer outra entidade.

por exemplo eu quero incluir pela primeira vez na tabela aluno , mas na hora de incluir na tabela aluno_materia eu não tenho o codigo da materia. como resolvo isso?

[quote=rib]por exemplo eu quero incluir pela primeira vez na tabela aluno , mas na hora de incluir na tabela aluno_materia eu não tenho o codigo da materia. como resolvo isso?
[/quote]

Antes de inserir na tabela aluno_materia, você precisa verificar se os dados que você está criando estão nas tabelas de aluno e materia.

De um select com os dados do aluno na tabela aluno e um select com os dados da materia na tabela materia.

Se em algum dos casos não retornar valor, quer dizer que não possue a informação e consequentemente não tem como estabelecer esse
relacionamento. Ou você avisa o usuário e não cria o dado na aluno_materia ou cria os dados nas tabelas aluno e materia e depois cria o aluno_materia.

Muito obrigado , agora ficou claro :slight_smile:

Se você quer incluir o aluno e não tem o código da matéria, significa que este aluno não está matriculado em nenhuma matéria. Portanto, não há motivos para você incluir registros na tabela AlunoMateria.

Agora, lá no seu formulário de cadastro, provavelmente você irá disponibilizar uma lista com as matérias JÁ CADASTRADAS no sistema. Desta forma o usuário irá definir uma lista de matérias das quais o aluno fará parte. Neste caso, no momento da inclusão do aluno você terá uma lista de matérias. Daí você ira incluir 1 registro na tabela aluno e 1 registro na tabela AlunoMateria PARA CADA MATÉRIA DA LISTA.

Exemplo

Tabela Aluno (Código, Nome)
1 - João da Silva Sauro

Tabela Materia (Código, Matéria)
1 - Português
2 - Matemática
3 - Ciências
4 - História

Tabela AlunoMateria (Código do Aluno, Código da Matéria, Valor Hora Aula)
1 - 1 - 01:00h
1 - 2 - 01:00h
1 - 4 - 01:00h

Olhando os dados acima, significa que o aluno código 1 - João da Silva Sauro está matriculado nas matérias 1 - Português, 2 - Matemática e 4 - História, todas com 1 hora de duração.

Caso eu queira matricular o 1 - João também na matéria 3 - Ciências com 01:00 hora de duração, eu vou gerar um SQL de INSERT na tabela AlunoMateria passando os valores 1 - 3 - 01:00h, para os respectivos campos (Código do Aluno, Código da Matéria, Valor Hora Aula).

Bem… espero que agora tenha ficado mais claro! =]

putz , fico devendo essa para vocês , muito obrigado mesmo.