Hibernate: REFRESH Object

3 respostas
gporpino

Galera

Está acontecendo um comportamento que estou achando estranho.

Meu Mapeamento
@Entity
public class Student extends BaseEntity {
	...
	@OneToOne(cascade={CascadeType.REFRESH})
	private Sponsor firstSponsor;
        ...
}
@Entity
public class Sponsor extends BaseEntity  {

	private String name;
        ...
}
Eu quero que quando eu salvar o student com o estado abaixo, o hibernate não atualize o name:
student: {
     sponsor: {
           id: 123,
           name: ""
     }
}

Note que o name está vazio.
Vejo no banco e de fato o hibernate não atualiza os dados, mas quando pego o objeto ele vem com o name vazio.
Se eu restartar a aplicação os dados que estão no banco voltam.

Conseguir ajeitar esse comportamento dando um refresh, mas o salvamento aumentou muito de tempo.

Tem alguma outra solução?

OBS: Essa mesma situação não acontece em outro objeto que está mapeado semelhantemente. Isso me deixou mais intrigado ainda.

3 Respostas

A

cara,

se vc nunca for atualizar name, tente colocar a anotação @Column(updatable= false) e ve se funciona.

t+

gporpino

Não é isso.

Eu só não quero atualizar o name quando salvar o student, mas quando salvar o sponsor eu quero salvar sim.

Alguma idéia?

A

cara,

faz o seguinte então,

@JoinColumn(name = "CHAVE_ESTRAGEIRA", referencedColumnName = "CHAVE_PRIMARIA")
    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
    private Sponsor firstSponsor;

so que seu Objeto Sponsor tem que ser um objeto sincronizado com o bd. (ou vc faz find ou um merge)

t+

Criado 4 de outubro de 2011
Ultima resposta 5 de out. de 2011
Respostas 3
Participantes 2