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:
Nessa tabela associativa, tem q ter ID?
fredye
Agosto 1, 2012, 7:19am
#7
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;
...
}