hibermat wrote:
Quelle est la différence avec la méthode que je proposais ?
C'est plus jolie ! ;)
Non mais faut mieux faire comme ça pour une recherche d'objet par son id (meilleur utilisation du cache de niveau 2)
hibermat wrote:
Sinon, qu'est-ce qui garantit la synchronisation si par exemple, j'ai en même temps une autre requête qui modifie un autre champ firstname. Le temps du get et du traitement, je peux avoir des incohérences ?
Tres bonne question ! :)
Pour des modifs sur deux champs différents, il n'y a aucun problème hibernate ne va updater que les champs modifiés.
(Attention pour savoir si un champ est modifier il utilise la methode equals, donc si tu utilises des UserType, attention de l'avoir bien ecrite)
Apres pour deux écritures sur le meme champs, c'est ton lock policy qui va te permettre de configurer cela. Par defaut on est en lock database (je crois...) c'est à dire que c'est la base de données qui gère la coherence, c'est important surtout dans le cas de cluster avec une base centralisée.
Et la tu as des lock pessimistes, optimiste...
hibermat wrote:
Sinon, tu notes :
User user = (User) session.get(User.class, id);
En fait lorsque je reçois une requête d'un client vers mon AS, j'ai comme paramètre un login qui n'est pas mon id de table.
Commun puis-je passer de ce login à cet id, j'ai besoin de faire un autre lookup ?
La faut faire des Criterias
Code:
Criteria crit = session.createCriteria(User.class);
crit.add(Restrictions.eq("login", monLogin));
crit.setCacheable(true);
List<User> users = crit.list();
Encore une fois évitez de faire du SQL, on fait de l'objet bordel ! :))