Hibernate gerando um modelo esquisito [RESOLVIDO]

3 respostas
gomesrod

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):

@Entity
@Table(name="notas")
public class Nota {
// ...
	@Id
	public int getId() {
		return id;
	}
// ...
	@OneToMany
	public List<ItemNota> getItens() {
		return itens;
	}
// ...
}

@Entity
@Table(name="itens_nota")
public class ItemNota {
// ...
	@Id
	public int getId() {
		return id;
	}
// ...
	@ManyToOne
	public Nota getNota() {
		return nota;
	}
// ...
}

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!

3 Respostas

P

Tente especificar a propriedade mappedBy do seu @OneToMany.
Especifique melhor seu relacionamento que ele vai adaptando a criação do banco.

gomesrod

Excelente…
Depois de colocar o mappedBy o banco ficou “certo”.
Valeu!

juniorsatanas

Como ficou o formulario digo JSP ou XHTM !

Criado 15 de julho de 2009
Ultima resposta 2 de mar. de 2010
Respostas 3
Participantes 3