IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Web Java Discussion :

Spring & Hibernate recréent un objet au lieu de le mettre à jour


Sujet :

Spring Web Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 49
    Par défaut Spring & Hibernate recréent un objet au lieu de le mettre à jour
    Bonjour à tous,

    J'ai un problème de modification de données en utilisant Spring et Hibernate. Je m'explique :
    J'ai trois objets (pour faire simple) : un objet Equipe, un objet Utilisateur et un objet Chrono. Voici l'implémentation de l'équipe sachant que les deux autres sont plus simples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    @Entity()
    @Table(name = "team")
    public class Team implements Serializable {
        private static final long serialVersionUID = 654975530626725829L;
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "id")
        private Long id;
     
        @Column(name = "name")
        private String name;
     
        @Column(name = "creation", nullable = false)
        private Date creation = new Date();
     
        @ManyToOne()
        @JoinColumn(name = "trainer", nullable = false)
        private User trainer;
     
        @ManyToOne()
        @JoinColumn(name = "category", nullable = false)
        private Category category;
     
        @ManyToOne()
        @JoinColumn(name = "equipment")
        private Equipment equipment;
     
        @LazyCollection(LazyCollectionOption.FALSE)
        @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "team")
        private List<Chrono> chonos;
     
        @ManyToMany
        @LazyCollection(LazyCollectionOption.FALSE)
        @JoinTable(name = "team_user",joinColumns = {@JoinColumn(name = "team")},inverseJoinColumns = {@JoinColumn(name = "user")})
        private List<User> trainedUsers;
    Voici mon DAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public class TeamDAO implements ITeamDAO , Serializable {
    	private static final long serialVersionUID = 376556662034995161L;
     
    	private SessionFactory sessionFactory;
     
    	/**
             * Get Hibernate Session Factory
             * 
             * @return SessionFactory - Hibernate Session Factory
             */
    	public SessionFactory getSessionFactory() {
    		return sessionFactory;
    	}
     
    	/**
             * Set Hibernate Session Factory
             * 
             * @param SessionFactory
             *            - Hibernate Session Factory
             */
    	public void setSessionFactory(SessionFactory sessionFactory) {
    		this.sessionFactory = sessionFactory;
    	}
     
    	@Override
    	public void add(Team team) throws HibernateException {
    		this.sessionFactory.getCurrentSession().save(team);
    	}
     
    	@Override
    	public void update(Team team) throws HibernateException {
    		this.sessionFactory.getCurrentSession().update(team);
    	}
    et mon service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    @Transactional(readOnly = true)
    public class TeamService implements ITeamService {
    	private static final long serialVersionUID = -3580420360675832960L;
     
    	private ITeamDAO teamDAO;
     
    	public ITeamDAO getTeamDAO() {
    		return teamDAO;
    	}
     
    	public void setTeamDAO(ITeamDAO teamDAO) {
    		this.teamDAO = teamDAO;
    	}
     
    	//
     
    	@Override
    	@Transactional(readOnly = false)
    	public void add(Team team) throws HibernateException {
    		this.teamDAO.add(team);
    	}
     
    	@Override
    	@Transactional(readOnly = false)
    	public void update(Team team) throws HibernateException {
    		this.teamDAO.add(team);
    	}
    Mon problème est le suivant : quand je crée une équipe avec des utilisateurs, tout va bien. Quand j'ajoute un chrono à mon équipe, tout va bien. Mais quand j'ajoute un utilisateur dans mon équipe (ajout dans la liste puis update), j'obtiens un nouvel objet avec les chronos et les utilisateurs et l'ancien perd les chronos et les utilisateurs.
    Déjà, je ne vois pas pourquoi il recrée un objet alors qu'il devrait simplement ajouter les utilisateurs et c'est tout...

    Avez vous une idée pour moi ?

    Merci d'avance.

  2. #2
    Membre chevronné Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Par défaut
    Essaye de faire update plutôt que add quand tu fais un update au niveau de ton service pour voir si ça change quelque chose

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 49
    Par défaut
    Effectivement, question débile...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [hibernate] Collection d'objet persistent
    Par Invité dans le forum Hibernate
    Réponses: 10
    Dernier message: 28/04/2006, 16h56
  2. [HIBERNATE] Chargement d'objet incorrect
    Par faya972 dans le forum Hibernate
    Réponses: 4
    Dernier message: 19/04/2006, 23h01
  3. SPRING+STRUTS+HIBERNATE. Une bonne solution ?
    Par ollivier dans le forum Struts 1
    Réponses: 9
    Dernier message: 10/04/2006, 13h16
  4. [Hibernate][Spring] Session Hibernate initialisée
    Par mauvais_karma dans le forum Hibernate
    Réponses: 12
    Dernier message: 08/08/2005, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo