Olá!
Estou fazendo alguns testes com EJB3+JPA (implementação do Jboss 5, que usa Hibernate) e quando as tabelas foram geradas eu achei um tanto estranho o modo como ele modelou um relacionamento.
Trata-se do clássico exemplo da classe Nota, que apresenta uma coleção de ItemsNota. Os ItemsNota, por sua vez, tem referência à Nota. Essas são as classes (algumas partes foram retiradas):
[code]@Entity
@Table(name=“notas”)
public class Nota {
// …
@Id
public int getId() {
return id;
}
// …
@OneToMany
public List getItens() {
return itens;
}
// …
}
@Entity
@Table(name=“itens_nota”)
public class ItemNota {
// …
@Id
public int getId() {
return id;
}
// …
@ManyToOne
public Nota getNota() {
return nota;
}
// …
}[/code]
A meu ver, a criação das tabelas devia ser a seguinte: uma tabela notas, com o campo ID, e uma tabela items_nota, com os campos ID e ID_NOTA. Isso seria suficiente para pesquisar uma Nota com todos os seus itens e também um item com sua respectiva nota.
No entanto, vejam o que ele criou:
Tabela notas:
+-------+
| Field |
+-------+
| id |
+-------+
Tabela itens_nota:
+---------+
| Field |
+---------+
| id |
| nota_id |
+---------+
Tabela notas_itens_nota:
+----------+
| Field |
+----------+
| notas_id |
| itens_id |
+----------+
Ou seja, além dos campos que eu estava esperando, ele criou uma tabela “DE-PARA” ! Isso está me parecendo muito estranho, pois além de redundante (o campo FK notas_id deveria dar conta do relacionamento) esse recurso da tabela DE-PARA deveria ser usada apenas em relacionamentos Many-to-Many.
Como devo lidar com isso? Fiz algo errado nas classes/anotações do relacionamento? Ou tenho que simplesmente aceitar o que o framework achar melhor? Se eu quiser fazer uma carga manual tenho que respeitar tanto o relacionamento da ForeignKey quanto o da tabela de-para?
Valeu!