[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

RES: Dúvidas com o CMR



Edgar, existe uma tag no arquivo descritor jbosscmp-jdbc.xml na qual você indica o nome da tabela do relacionamento em questão... o ejb-relation-name é apenas uma maneira de identificar a relação dentro dos descritores.

Eis um trecho onde a tag aparece ...

 

<relationships>

      <ejb-relation>

          <ejb-relation-name>Aluno-Disciplina</ejb-relation-name>

          <relation-table-mapping>

            <table-name>Matriculas</table-name>

          </relation-table-mapping>

          <ejb-relationship-role>

            <ejb-relationship-role-name>

              Aluno-Has-Disciplinas

            </ejb-relationship-role-name>

            <key-fields>

              <key-field>

                <field-name>alunoID</field-name>

                <column-name>alunoID</column-name>

              </key-field>

            </key-fields>

          </ejb-relationship-role>

          <ejb-relationship-role>

            <ejb-relationship-role-name>

              Disciplina-Has-Alunos 

            </ejb-relationship-role-name>

            <key-fields>

              <key-field>

                <field-name>disciplinaID</field-name>

                <column-name>disciplinaID</column-name>

              </key-field>

            </key-fields>

          </ejb-relationship-role>

      </ejb-relation>

....

</relationships>

 

neste exemplo será criada a tabela "Matriculas" para o relacionamento many to many de Aluno e Disciplina.

Note que o table name é definido para um ejb-relation e cada chave estrangeira é definida para o ejb-relationship-role-name correspondente (ou seja, você deve fazer uma correspondência com o que é feito no ejb-jar.xml), assim o campo alunoID (chave estrangeira de aluno) para a role que mapeia o aluno cursando várias disciplinas (deve existir um campo alunoID na tabela de alunos - chave primária) corresponderá à coluna alunoID na nova tabela criada. O mesmo ocorre com o campo disciplinaID (chave estrangeira da disciplina).

 

>          Collection c = aluno.getMatriculas();

>          c.add(Disciplina);

>          aluno.setMatriculas(c);

 

Não  é necessário efetuar "aluno.setMatriculas(c);" pois ao chamar "aluno.getMatriculas();" você obteve uma referência para a coleção de disciplinas cursadas e ao chamar o método add você já adicionou a disciplina em questão.

 

Mesmo assim, algo deveria aparecer na tabela de relacionamento many to many (seja lá o nome com a qual ela tenha sido criada).

 

Tente isso... se não funcionar, possivelmente existe algo de errado no ejb-jar.xml. Qualquer coisa, estamos ai...

 

Obs.: estou mandando um .pdf que pode ajudar, nele tem o exemplo usado pelo prof. em aula (dos gangsters) e mais algumas coisas, acho que ajuda bastante... espero que não haja problemas por causa do tamanho do arquivo...

 

[]’s

 

Fernando

(Maguila)

Attachment: JBossCMP.pdf
Description: Adobe PDF document