2017-01-19 3 views
0

J'ai une méthode qui va insérer un enregistrement de présence d'étudiant dans la base de données. Il devrait y avoir un seul enregistrement de présence pour un étudiant dans la base de données pour une date. Je dois m'assurer de la cohérence des données. J'ai défini cette méthode comme une méthode de synchronisation (par exemple, deux enregistrements ne doivent pas être insérés pour un étudiant particulier si nous essayons simultanément à partir d'un autre système/navigateur).Deux enregistrements sont insérés dans la base de données lorsque la méthode synchronisée est appelée à partir de différents systèmes/navigateurs simultanément

public synchronized void SaveOrupdateAttendance(final StudentAttendance studentAttendance) throws ApplicationException { 
    /*Method Code*/ 
    saveOrUpdate(studentAttendance); 
} 

Deux enregistrements sont insérés dans db. Quel est le problème avec mon approche. S'il vous plaît aider

+0

Votre méthode est probablement appelé deux fois. Nous aurions besoin de voir plus de code. –

+0

@SteveSmith Ouais. Il appelle à partir d'une boucle d'une autre méthode synchronisée. Dans ce cas aussi, cela devrait fonctionner correctement. Ryt? –

+1

La synchronisation n'est pas magique. Pour que cela fonctionne, vous devez vous assurer qu'il n'y a qu'une seule instance de la classe où elle est définie. Un [mcve] serait le mieux, car la quantité de code qui vous est donnée est insuffisante pour localiser votre problème. – RealSkeptic

Répondre

1

synchronisation dans JAVA gérer uniquement les multi-threads pour partager la ressource un par un. Cela signifie que les données que vous utilisez dans la méthode ne doivent pas être dupliquées.

Faites vérifier avant d'insérer les données dans la base de données ou concevoir l'application pour ne pas autoriser la soumission multiple