2010-08-27 4 views
1

J'ai quelque chose comme Person, et Address objet (Person a un Address et d'autres propriétés).Problème avec hibernate - contexte persistant

Je mets à jour Address ou d'autres propriétés dans une demande. Et dans une autre demande, je suis à la recherche de toutes les personnes. Mais parfois, je peux voir les propriétés modifiées et parfois je ne peux pas.

Juste en faisant une autre demande me retournera les propriétés modifiées ou non modifiées.

Où est l'erreur. J'ai essayé de débusquer partout, de commettre, mais sans succès. Une idée?

Ma cartographie:

@Entity 
@Table(schema="zet",name="phone_number") 
public class PhoneNumber { 
    private String id; 
    private String number; 
    private Person person; 
    private int status; 
    ...... 

    public int getStatus() { 
     return status; 
    } 

    public void setStatus(int status) { 
     this.status = status; 
    } 

    public void setPerson(Person person) { 
     this.person = person; 
    } 

    @OneToOne(cascade= { CascadeType.PERSIST, CascadeType.MERGE, 
         CascadeType.REFRESH })  
    @JoinColumn(name="person_id") 
    public Person getPerson() { 
     return person; 
    } 

    public void setNumber(String number) { 
     this.number = number; 
    } 

    @Column(name="num",unique=true,nullable=false) 
    public String getNumber() { 
     return number; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    @Id 
    @Column(name = "id", nullable = false) 
    public String getId() { 
     return id; 
    } 
} 
+0

Quelle application développez-vous? Web ou bureau? Utilisez-vous un mécanisme de cache personnalisé? –

+0

application web. et nous avons juste le cache de 1er niveau - par défaut je suppose. – feiroox

+0

Veuillez également partager votre définition de mappage. Sans détails, il s'agit juste de deviner la cause du problème. –

Répondre

0

Oh, je l'ai eu, merci beaucoup pour votre aide (Petr Kozelek), c'est très apprécié. Il existe des caches de session pour différentes bases de données, différents fournisseurs de connexion. Et une session différente était en cours de finalisation.

0

Cela ressemble à un problème de transaction. Utilisez-vous Spring en tant que gestionnaire de transactions?

pour vérifier que le changement persiste, utilisez:

@Transactional(readOnly = false) 
    public void persistMyChange(Bean myBean) { 
    myBeanDao.save(myBean); 
    } 

Transactionnelle est readOnly false par défaut, mais votre couche de service peut être enveloppé dans un transactionnelles avec readOnly true.

+0

pas de ressort utilisé .. – feiroox