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

Hibernate Java Discussion :

object references an unsaved transient instance - save the transient


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 81
    Par défaut object references an unsaved transient instance - save the transient
    Bonjour,

    J'ai le mapping suivant :

    Nom : Mapping.png
Affichages : 1640
Taille : 12,0 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Entity
    @Table(name = "authorities")
    public class Authorities implements Serializable {
     
        @EmbeddedId
        protected AuthoritiesPK authoritiesPK;
     
        @ManyToOne
        @JoinColumn(name = "username", insertable = false, updatable = false)
        private Users users;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @Embeddable
    public class AuthoritiesPK implements Serializable {
     
        @Column(name = "username")
        private String username;
        @Column(name = "authority")
        private String authority;
    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
    @Entity
    @Table(name = "users")
    public class Users implements Serializable {
     
        @Id
        @Column(name = "username")
        private String username;
        @Column(name = "password")
        private String password;
        @Column(name = "enabled")
        private Boolean enabled;
        @Column(name = "email")
        private String email;
     
        @OneToMany(mappedBy = "users", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        private List<Authorities> authoritiesList;
    J'ai l’erreur suivante quand je modifie un utilisateur ?

    org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: entity.Authorities.users -> entity.Users

    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
     
        public Users modifyUser(Users pUser, List<String> listAuthorities) {
     
            EntityTransaction tx = getEM().getTransaction();
            tx.begin();
            if (pUser.getAuthoritiesList() != null) {
     
                List<Authorities> authoritieses = pUser.getAuthoritiesList();
                for (Authorities a : authoritieses) {
                    a.setUsers(null);
                    getEM().remove(a);
                }
                pUser.getAuthoritiesList().clear();
                for (String authoritie : listAuthorities) {
                    addAuthorities(authoritie, pUser);
                }
                pUser = getEM().merge(pUser);
     
            }
            getEM().remove(pUser);
            tx.commit();
            return pUser;
        }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    a quoi ressemble addAuthorities ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 81
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void addAuthorities(String authoritie, Users users) {
            AuthoritiesPK authoritiesPK = new AuthoritiesPK(users.getUsername(), authoritie);
            Authorities authorities = new Authorities(authoritiesPK);
            authorities.setUsers(users);
            getEM().persist(authorities);
    }

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu as l'erreur à quelle ligne?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 81
    Par défaut
    at dao.UserDao.addAuthorities(UserDao.java:158)
    at dao.UserDao.modifyUser(UserDao.java:75)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addAuthorities(authoritie, pUser);
    (75)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getEM().persist(authorities);
    (158)

  6. #6
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut une petite question pourquoi fais-tu:
    dans la method
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Users modifyUser(Users pUser, List<String> listAuthorities)
    en passant chez moi, j´ai repris ton code, et je n´ai pas de probleme, j´ai modifié le mode de persistence, mais pas de changement explicite du code, et je n´ai aucun probleme meme pour faire un delete, car ta methode delete le user. mais la aussi je n´ai aucune erreur.

    Eric

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 81
    Par défaut
    Oula c'es une erreur je veux le modifier !

    donc je dois faire getEM().merge(pUser); ?

    Peux-tu m'expliquer ton changement de persistance ?

    Merci

  8. #8
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    en principe tu ne dois fonctionner qu´avec les Id´s,
    je m´explique:
    MyBean.java
    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
     
      @PersistenceContext(unitName = "nom_de_ton_unit")
      private EntityManager em;
    public Users modifyUser(String username, List<String> listAuthorities) {
     
           public Users modifyUser(Users pUser, List<String> listAuthorities) {
     
    		if (pUser.getAuthoritiesList() != null) {
     
    			List<Authorities> authoritieses = pUser.getAuthoritiesList();
    			for (Authorities a : authoritieses) {
    				a.setUsers(null);
    				em.remove(a);
    			}
    			pUser.getAuthoritiesList().clear();
    			for (String authoritie : listAuthorities) {
    				addAuthorities(authoritie, pUser);
    			}
    			pUser = em.merge(pUser);
     
    		}
    		return pUser;
    	}
    et voici son appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Users pUser = myBean.getUserById("testusername");
      List<String> listAuthorities = new ArrayList<String>();
       listAuthorities.add("Control");
       listAuthorities.add("Admin");
     
       myBean.modifyUser(pUser, listAuthorities);
    si tu n´arrive pas a le calquer sur le tiens, je pourrais t´envoyer tout mon code.
    eric

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/06/2009, 16h51
  2. Réponses: 4
    Dernier message: 14/02/2007, 18h48
  3. Réponses: 1
    Dernier message: 28/12/2006, 11h05
  4. Réponses: 2
    Dernier message: 11/12/2006, 09h31
  5. Réponses: 1
    Dernier message: 20/04/2006, 12h09

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