Hibernate: Tabela associativa com atributo

Estou penando com um banco de dados legado, ja tenho tempo que estou pesquisando como fazer uma tabela associativa com atributo. Alguem tem um tutorial ou algo parecido???
Nao to entendo como mapear essa situacao.

Acho que pra ficar mais fácil de te ajudar, você podia pelo menos postar um modelo de dados exemplificando o seu caso.

sucesso.
Roger Leite

Amigo deixa eu tentar te explicar.

Você terá que mapear a tabela associativa em uma nova classe. Nesta sua classe você mapea os atributos da associação!

Por exemplo, você tem uma tabela Aluno, uma Turma e a tabela associativa é Matricula (Um aluno pode matricular em várias turmas e uma Turma pode receber matrículas de vários Alunos).

Nesta situação temos um relacionamento de Muitos-Para-Muitos de Aluno para Turma. A tabela Matrícula faz somente a associação entre elas. Agora suponhamos que gostaríamos de acrescentar a hora que um aluno fez a matrícula dele. Neste caso temos que armazenar este dado na associação, no caso a tabela Matrícula.

Como expliquei no início, você agora terá que mapear a tabela Matrícula com o atríbuto “dataMatricula”. E, claro, os outros atributos da associação.

Espero ter ajudado. Se eu não fui claro tente postar o seu problema que tentarei te ajudar.

Abraços.

Acrescentando a resposta do “normandesjr”, onde a solução mostrada por ele é o mapeamento de uma nova classe intermediária, solução que eu também uso quando me deparo com este tipo de associação. Vou deixar a você um exemplo de um mapeamento onde temos a classe Aluno e Turma, com relacionamento muitos-para-muitos entre as duas, com uma classe associativa Matricula.

[code]<?xml version="1.0" encoding="utf-8" ?>

<?xml version="1.0" encoding="utf-8" ?> [/code]

As suas classes ficam:

[code]public class Aluno {
private int id;
private String nome;
private Set matriculas;
// construtor, getters e setters
}

public class Turma {
private int id;
private Set matriculas;
// construtor, getters e setters
}

public class MatriculaPK implements Serializable {
private Turma turma;
private Aluno aluno;
// construtor, getters e setters
}

public class Matricula {
private MatriculaPK pk;
private Date data;
// construtor, getters e setters
}[/code]

Nes exemplo a classe Matricula possui chave composta (composite-id), que eu saiba é necessário criar uma classe só para as chaves primárias, no caso MatriculaPK.
Espero ter esclarecido sua dúvida.

[quote=vitorosan]Acrescentando a resposta do “normandesjr”, onde a solução mostrada por ele é o mapeamento de uma nova classe intermediária, solução que eu também uso quando me deparo com este tipo de associação. Vou deixar a você um exemplo de um mapeamento onde temos a classe Aluno e Turma, com relacionamento muitos-para-muitos entre as duas, com uma classe associativa Matricula.

[code]<?xml version="1.0" encoding="utf-8" ?>

<?xml version="1.0" encoding="utf-8" ?> [/code]

As suas classes ficam:

[code]public class Aluno {
private int id;
private String nome;
private Set matriculas;
// construtor, getters e setters
}

public class Turma {
private int id;
private Set matriculas;
// construtor, getters e setters
}

public class MatriculaPK implements Serializable {
private Turma turma;
private Aluno aluno;
// construtor, getters e setters
}

public class Matricula {
private MatriculaPK pk;
private Date data;
// construtor, getters e setters
}[/code]

Nes exemplo a classe Matricula possui chave composta (composite-id), que eu saiba é necessário criar uma classe só para as chaves primárias, no caso MatriculaPK.
Espero ter esclarecido sua dúvida.[/quote]

Seu exemplo ficou bastante parecido com o meu mapeamento, mas pelo que eu entendo essa solução não permite que eu salve Aluno em cascade, e automaticamente ele salva a tabela associativa (matricula) e a turma. Ao meu entender parece que o hibernate tenta salvar aluno, matricula e turma nesta ordem, estou tentando informar ao hibernate para salvar aluna,turma e matricula (visto que essa aqui precisa da chave estrangeira apontando pra turma).