Bonjour, je débute avec Hibernate et je me posais une question concernant les clés composées : j'ai une table USER et une table TEAM avec une relation m:n (la table pour la relation est USER_TEAM). Toutes les tables ont des clés composées :
- USER :
USR_CODE,
USR_INCREMENT, ...
- TEAM :
TEA_CODE,
TEA_INCREMENT, ...
- USER_TEAM :
USR_CODE,
USR_INCREMENT,
TEA_CODE,
TEA_INCREMENT, ...
(cette structure ne peut pas être changée)
Pour la génération des clés primaires, j'ai fait une classe Java
Code:
public class KeyGeneratorUser {
public static void generate(User user) {
CompositeIdUser compositeIdUser = null;
try {
Session session = HibernateUtils.getSession();
HibernateUtils.beginTransaction();
// SELECT MAX...
Long max = (Long)session.createCriteria(User.class)
.setProjection(Projections.max("id.increment"))
.add(Restrictions.eq("id.code", "USR"))
.uniqueResult();
// Commit de la transaction
HibernateUtils.commitTransaction();
// S'il n'y a aucun enregistrement correspondant au code, le max est à 0
if(max == null) {
max = new Long(0);
}
compositeIdUser = new CompositeIdUser("USR", max + 1);
user.setId(compositeIdUser);
} catch(Exception e) {
// Traitement de l'exception
System.out.println("Erreur : " + e.getMessage());
}
}
}
Et la classe CompositeIdUSer représente l'id des user (il y en a aussi une pour Team)
Est-il possible de verrouiller la table pour qu'il n'y ait pas plusieurs fois le même id généré s'il y a des appels en parallèle pour générer la clé ?
J'espère être clair, merci
Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
Hibernate version:
Hibernate 3.1
Mapping documents:
Code between sessionFactory.openSession() and session.close():
Full stack trace of any exception that occurs:
Name and version of the database you are using:
MySQL 5.0
The generated SQL (show_sql=true):
Debug level Hibernate log excerpt: