-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Probleme avec les transactions
PostPosted: Fri Jun 01, 2007 6:50 am 
Newbie

Joined: Fri Jun 01, 2007 6:13 am
Posts: 2
Bonjour à tous,

Voila j'ai un problème avec les transactions avec hibernate car celles-ci ne veulent pas opérer de rollback.
Je m'explique : j'ai crée une class User avec hibernate annotations et j'ai creer une class de test pour me permettre d'ajouter des utilisateurs dans ma base de donnée MySQL.
Le problème c'est que quand un utilisateur est déja présent dans ma base de donnée, je voudrais que la transaction soit 'annulée' c'est à dire que la base soit revenu en son état initiale avant l'insertion.

Voici le code de la classe User :

Code:
@Entity
@Table(name = "USERS")
public class User {

   @Id
   @GeneratedValue
   @Column(name = "USER_ID")
   private Long id;

   @Column(name = "LOGIN", nullable = false, unique = true)
   private String login;

   @Column(name = "PASS", nullable = false)
   private String pass;

   @ManyToMany(targetEntity = com.calenco.users.Role.class, cascade = {
         CascadeType.PERSIST, CascadeType.MERGE })
   @JoinTable(name = "USER_ROLE", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
   private Collection<Role> roles = new ArrayList<Role>();

   @Column(name = "MAIL", nullable = false)
   private String mail;

   /**
    * Creates a new instance of Users
    */
   public User() {
   }

   public User(String login, String pass, String mail, Collection<Role> role) {
      super();
      this.login = login;
      this.pass = pass;
      this.roles = role;
      this.mail = mail;
   }

   public Long getId() {
      return id;
   }

   @SuppressWarnings("unused")
   private void setId(Long id) {
      this.id = id;
   }

   public String getLogin() {
      return login;
   }

   public String getPass() {
      return pass;
   }

   public void setLogin(String login) {
      this.login = login;
   }

   public String getMail() {
      return mail;
   }

   public Collection<Role> getRoles() {
      return roles;
   }

   public void setMail(String mail) {
      this.mail = mail;
   }

   public void setPass(String pass) {
      this.pass = pass;
   }

   public void setRoles(Collection<Role> roles) {
      this.roles = roles;
   }

   public void addRole(Role role) {
      roles.add(role);

   }

}


Voici le code d'ajout des utilisateurs :

Code:
public void addUser(User user) throws UserExistsException {
      if (userExists(user)) {
         throw new UserExistsException("Users already exists");
      } else {
         Session session = HibernateUtils.getSession();
         Transaction transact = session.beginTransaction();
         session.save(user);
         System.out.println("User added : " + user.getLogin());
         transact.commit();
         session.close();
      }
   }

   public boolean addUsers(List<User> users) throws UserExistsException {
      Session session = HibernateUtils.getSession();
      Transaction transact = null;

      boolean retVal = true;

      try {
         transact = session.beginTransaction();
         for (int i = 0; i < users.size(); i++) {
            System.out.println("Trying to add user " + i);
            addUser(users.get(i));
         }
         transact.commit();

      } catch (UserExistsException e) {
         if (transact != null)
            transact.rollback();
         retVal = false;
         throw e;

      } finally {
         session.close();
      }
      return retVal;
   }


J'aimerais donc savoir pourquoi ma transaction n'effectue pas de rollback. Si il y'a une autre méthode ou alors une autre facon de faire je serais heureux de pouvoir la connaitre.

Merci pour vos reponses.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.