Comportamento hibernate 3

2 respostas
edilson_x

Pessoal, estou com o seguinte problema

na minha classe Predio tenho um relacionamento para apartamentos

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinTable(name="Predio_Apartamento", 
			joinColumns = {@JoinColumn(name = "ano"), @JoinColumn(name = "numero") },
			inverseJoinColumns={@JoinColumn(name = "id_apartamento")})
			private List<Apartamento> apartamentos;

na classe Apartamento tenho uma lista dos quartos deste apartamento

@OneToMany(fetch = FetchType.EAGER , cascade= CascadeType.REMOVE)
	@OrderBy(value = "id")
	private List<Quarto> quartos = new ArrayList<Quarto>();

Quando eu dou um select em um prédio no log do mysql ele executa um delete e um insert em todos os objetos da s listas

segue o log abaixo:

insert into quarto (comprimento, largura) values (2, 3)
                   3184 Query       delete from Apartamento_Quartowhere apartamento_id=480
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1383)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1384)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1386)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1392)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1395)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1396)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1397)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1398)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1399)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1400)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1401)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1402)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1403)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1404)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1405)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1406)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1407)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1410)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1411)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1448)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1468)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1485)
                   3184 Query       insert into Apartamento_Quarto(apartamento_id, quarto_id) values (480, 1486)
                   3184 Query       delete from Predio_Apartamento where ano=2008 and numero=3
                   3184 Query       insert into Predio_Apartamento (ano, numero, id_apartamento) values (2008, 3, 480)
                   3184 Query       delete from Predio_Apartamento where ano=2008 and numero=1
                   3184 Query       insert into Predio_Apartamento (ano, numero, id_apartamento) values (2008, 1, 478)
                   3184 Query       delete from Predio_Apartamento where ano=2008 and numero=2
                   3184 Query       insert into Predio_Apartamento (ano, numero, id_apartamento) values (2008, 2, 471)
                   3184 Query       insert into Predio_Apartamento (ano, numero, id_apartamento) values (2008, 2, 472)
                   3184 Query       insert into Predio_Apartamento (ano, numero, id_apartamento) values (2008, 2, 479)
                   3184 Query       delete from Predio_Apartamento where ano=2008 and numero=4
                   3184 Query       insert into Predio_Apartamento (ano, numero, id_apartamento) values (2008, 4, 481)
                   3184 Query       commit

Alguém já passou por isso ou já viu algo parecido?
Saberiam me explicar esse comportamento do hibernate?
andei vasculhando os forúns do hibernate e não encontrei nada.

de antemão obrigado.

2 Respostas

rodolfoliviero

Bem algum tempo atraz tive um problema parecido, resolvi usando essas duas anotações do hibernate.

org.hibernate.annotations.CollectionOfElements
org.hibernate.annotations.IndexColumn

Espero te ajudado.

Att…

edilson_x

Olá Rodolfo, valeu pela dica.
Onten eu fiz o teste com estas anotações, realmente funciona, só que gera um problema, na tabela de relacionamento a index column é gerenciada pelo hibernate e se eu tiver que excluir um registro , por exemplo o indice 0 , quando tento listar novamente os registros recebo um NullPointerException.

Estou procurando uma anotação para JPA que seja equivalente a indexColum do hibernate.

Mesmo assim valeu pela dica e pelo esforço de ter respondido.

Criado 4 de junho de 2008
Ultima resposta 5 de jun. de 2008
Respostas 2
Participantes 2