Objetos Sendo Modificados

0 respostas
Jedi_FeniX

A minha dúvida é bem conceitual. Eu estou usando JPA para desenvolver um projeto, segue um exemplo de estrutura das classes:

public class TestA implements Serializable{
   @Id
   @Column(name="id_testa")
   private Long id;

   @OneToMany(fetch = FetchType.EAGER)
   @JoinColumn(name = "id_testb")
   @Fetch(FetchMode.JOIN)
   private Collection<TestB> bs;
}

public class TestB implements Serializable{
   @Id
   @Column(name="id_testb")
   private Long id;

   @OneToMany
   @JoinColumn(name="id_testc", nullable=false)
   @LazyCollection(LazyCollectionOption.FALSE)
   private Collection<TestC> cs;
}

public class TestC implements Serializable{
   @Id
   @Column(name="id_testc")
   private Long id;

   @OneToOne
   @JoinColumn(name="id_testd")
   private TestD tests;
}

public class TestD implements Serializable{
   @Id
   @Column(name="id_testd")
   private Long id;
}

Existe um momento que o EntityManager retorna uma lista de TestA e logo depois existe uma interação para popular os TestDs desse primeiro retorno, é exatamente nesta segunda interação que ocorre o problema.

Todos os TestDs que estão ligados ao mesmo TestC são sobrescritos pelos últimos registros, por exemplo:

registro 1: TestC{ id=53, TestD{ id=12}}

Se no final da interação houver um TestC com um TestD diferente os registros anteriores são modificados, o resultado ficaria assim:

registro 1: TestC{ id=53, TestD{ id=60}} --> o valor do TestD aqui deveria ser 12
registro 2: TestC{ id=53, TestD{ id=60}}

Implementei o equals e os hashCodes das classes mesmo assim o erro continua ocorrendo. Acredito que isso ocorra porque EntityManager entende que o TestD seja o mesmo objeto em toda a lista, existe alguma configuração para solucionar esse problema?

Criado 5 de fevereiro de 2013
Respostas 0
Participantes 1