[Hibernate]Tabela associativa com atributos

Galera tenho 3 tabelas(convenio, conveniado e conveniado_convenio), essa tabela conveniado_convenio é uma associativa e possui uma coluna a mais(data_inicial), alem dos FK de convenio e conveniado, se não fosse por essa coluna, faria um relacionamento @ManyToMany e ele mesmo criaria essa tabela associativa, certo?!
Qual é a melhor maneira de se fazer esse relacionamento usando annotation?

|Convenio|----------<-|Conveniado_convenio|->----------|Conveniado|

Fica assim:

[code]@Entity
class Convenio {

@OneToMany(mappedBy = “convenio”)
private ConveniadoConvenio cc;

}

@Entity
class Conveniado {

@OneToMany(mappedBy = “conveniado”)
private ConveniadoConvenio cc;

}

@Entity
class ConveniadoConvenio {

@ManyToOne
@JoinColumn(name = “COLUNA_ID_CONVENIADO”, insertable = false, updatable = false)
private Conveniado conveniado;

@ManyToOne
@JoinColumn(name = "COLUNA_ID_CONVENIO", insertable = false, updatable = false)
private Convenio convenio;

@Temporal(TemporalType.TIMESTAMP)
private Calendar dataInicial;
...

}[/code]E quando você for persistir algo, precisa salvar primeiro o Conveniado e o Convenio, e depois a associação ConveniadoConvenio.

Blz? Flw! :thumbup:

Valeu von.juliano,
eu testei assim tb… Ouvi falar que da pra fazer com @ColumnOfElements e @Parent. Qual seria a diferença?

psyltrance, isso eu não sei te dizer, até porque ainda não usei essas anotações. Fui olhar a documentação delas e achei umas coisas bem toscas:

http://docs.jboss.org/hibernate/stable/annotations/api/org/hibernate/annotations/class-use/Parent.html
http://docs.jboss.org/hibernate/stable/annotations/api/org/hibernate/annotations/class-use/CollectionOfElements.html

Eu uso da forma que te passei, e pra mim resolve legal!

Blz? Flw! :thumbup:

Valeuuuu

Nessa tabela associativa, tem q ter ID?

Minha dúvida e a mesma do usuário lazaropj.

Nessa tabela associativa, tem q ter ID?

Em todas as tabelas que eu crio, ele sempre pede uma chave Primaria, no caso o @Id, dependendo da tabela associativa talvez precise fazer chave composta, assim:

@Entity  
class ConveniadoConvenio {  
    ...  
    @Id
    @ManyToOne  
    @JoinColumn(name = "COLUNA_ID_CONVENIADO", insertable = false, updatable = false)  
    private Conveniado conveniado;  
  
    @Id
    @ManyToOne  
    @JoinColumn(name = "COLUNA_ID_CONVENIO", insertable = false, updatable = false)  
    private Convenio convenio;  
  
    @Temporal(TemporalType.TIMESTAMP)  
    private Calendar dataInicial;  
    ...  
}  

ou criar uma PK em um outro campo, assim:

@Entity  
class ConveniadoConvenio {  
    ...  
    @Id @GeneratedValue
    private long id;
    
    @ManyToOne  
    @JoinColumn(name = "COLUNA_ID_CONVENIADO", insertable = false, updatable = false)  
    private Conveniado conveniado;  
  
    @ManyToOne  
    @JoinColumn(name = "COLUNA_ID_CONVENIO", insertable = false, updatable = false)  
    private Convenio convenio;  
  
    @Temporal(TemporalType.TIMESTAMP)  
    private Calendar dataInicial;  
    ...  
}