2017-04-12 1 views
0

J'ai appelé un objet de classe:Enregistrement d'un objet avec des paramètres chargés et désireux OptimisticLockException

@Entity 
public class Classroom { 

    @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST }) 
    @JoinColumn(name = "girl", referencedColumnName = "id", nullable = true) 
    private GirlsInformationObject girl; 

    @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST }) 
    @JoinColumn(name = "boy", referencedColumnName = "id", nullable = true) 
    private BoysInformationObject boy; 
} 

Maintenant, imaginez que j'ai deux fils, tous deux conserver des informations sur la salle de classe et mettre à jour l'objet si nécessaire. L'un des fils est la mise à jour de l'objet avec des informations sur les filles, et l'autre met à jour l'objet avec des informations sur les garçons.

Imaginez que les deux threads accèdent à la même entrée Classroom en même temps. Les threads ajustent le InformationObject approprié et stockent l'objet dans la base de données, en utilisant ClassroomRepository.save(classRoom). Puis-je empêcher l'OptimisticLockException si les InformationObjects seraient paresseusement chargés?

Répondre

0

en fait, problème simultané se produisant ici résultant d'une exception optimistic. Ne faites-vous pas cette mise à jour dans une session séparée? Comme dans une transaction ou une session, vous mettez à jour les filles dans cet objet et dans la deuxième transaction ou session, vous récupérez la ligne et mettez à jour le champ des garçons. S'il vous plaît considérer cela

+0

La question était de savoir si je pouvais échapper à tout ce travail en définissant simplement le type 'FetchType.EAGER', car ce n'est pas cet objet qui est mis à jour. – Joetjah