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

Seam Java Discussion :

Exception obtenue "TransientObjectException"


Sujet :

Seam Java

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juin 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 1
    Par défaut Exception obtenue "TransientObjectException"
    bonjour ,

    je suis étudiant en 3ème année et je suis entrain de faire mon projet PFE qui consiste à une modification d'une application web réalisée à l'aide des technologies Seam, Richfaces..


    Mon problème est le suivant:

    je veux passer à une page ActivitedeprocessusEdit.xhtml en appuyant sur un bouton "Edit" , et j'obtiens cette exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.cynapsys.cyngpm.entity.Activiteduprocessus.modeleprocessus -> org.cynapsys.cyngpm.entity.Modeleprocessus
    Grâce à des "printf ", j'ai pu savoir que le getDefinedinstance() dans ActiviteduprocessusHome retourne NULL , mais je ne sais pas comment rectifier celà et si c'est la vraie source du problème.

    voilà le code des session Bean ActiviteduprocessusHome & ModeledeprocessusHome (session Bean)


    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    @Name("activiteduprocessusHome")
    public class ActiviteduprocessusHome extends EntityHome<Activiteduprocessus> {
    	private String selectedTab;
    	public String getSelectedTab() {
    		return selectedTab;
    	}
     
    	public void setSelectedTab(String selectedTab) {
    		this.selectedTab = selectedTab;
    	}
     
    	@In(create = true)
    	ModeleprocessusHome modeleprocessusHome;
    	@In(create = true)
    	ActiviteHome activiteHome;
     
    	public void setActiviteduprocessusActiviteprocessus(Integer id) {
    		System.out.println("++++++++++++setActiviteduprocessus+++++++++");
     
    		setId(id);
    	}
     
    	public Integer getActiviteduprocessusActiviteprocessus() {
    		System.out.println("++++++++++++getActiviteduprocessus+++++++++"+(Integer) getId());
     
    		return (Integer) getId();
    	}
     
    	@Override
    	protected Activiteduprocessus createInstance() {
    		System.out.println("++++++++++++create instance  activité+++++++++");
     
    		Activiteduprocessus activiteduprocessus = new Activiteduprocessus();
    		return activiteduprocessus;
    	}
     
    	public void wire() {
    		getInstance();
    		if(getInstance().equals(null))System.out.println("acitivite de processus:wire:getInstance est NULL");
    		Modeleprocessus modeleprocessus = modeleprocessusHome.getDefinedInstance();
    		if (modeleprocessus != null) {
    			getInstance().setModeleprocessus(modeleprocessus);
    		}else 		System.out.println("++++++++++++Modele Processus NULL+++++++++");
     
    		Activite activite = activiteHome.getDefinedInstance();
    		if (activite != null) { 
    			getInstance().setActivite(activite);
     
    		}			else 		System.out.println("++++++++++++activiteHome.getDefinedInstance() NULL+++++++++");
     
    	}
     
    	public boolean isWired() {
    		if (getInstance().getModeleprocessus() == null)
    			return false;
    		if (getInstance().getActivite() == null)
    			return false;
    		return true;
    	}
     
    	public Activiteduprocessus getDefinedInstance() {
    		return isIdDefined() ? getInstance() : null;
    	}
     
    	public List<Activiteduprojet> getActiviteduprojets() {
    		return getInstance() == null ? null : new ArrayList<Activiteduprojet>(
    				getInstance().getActiviteduprojets());
    	}
     
    	public List<Succession> getSuccessions() {
    		System.out.println("++++++++++++getSuccessions++++++++");
    		return getInstance() == null ? null : new ArrayList<Succession>(
    				getInstance().getSuccessions());
    	}
     
     
    	public String remove2(){
    		remove();
    		modeleprocessusHome.getEntityManager().refresh(modeleprocessusHome.getInstance());
    		return "/Modeleprocessus.xhtml&modeleprocessusNomprocessus="+modeleprocessusHome.getInstance().getId().getNomprocessus();
    	}
     
    	public String persist2(){
    		persist();
    		return "/Modeleprocessus.xhtml&modeleprocessusNomprocessus="+modeleprocessusHome.getInstance().getId().getNomprocessus();
     
    	}
     
    }

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    @Name("modeleprocessusHome")
    public class ModeleprocessusHome extends EntityHome<Modeleprocessus> {
     
    	private BigDecimal versionprocessus ;
    	private String  modeleprocessusNomprocessus;
     
    	public String getModeleprocessusNomprocessus() {
    		System.out.println("__________getNomprocessus()_________");
     
    		return getModeleprocessusId().getNomprocessus();
    	}
     
    	public void setModeleprocessusNomprocessus(String modeleprocessusNomprocessus) {
     
    		//System.out.println("TEST Nom"+ modeleprocessusNomprocessus);
    		//getModeleprocessusId().setNomprocessus(modeleprocessusNomprocessus);
    		//this.modeleprocessusNomprocessus = modeleprocessusNomprocessus;
    	}
     
     
     
    	public BigDecimal getVersionprocessus() {
    		System.out.println("__________getversionprocessus()_________");
     
    				return getModeleprocessusId().getVersionprocessus();
    	}
     
    	public void setVersionprocessus(BigDecimal versionprocessus) {
    		//System.out.println("TEST Version"+versionprocessus);
    		//getModeleprocessusId().setVersionprocessus(versionprocessus);
    		//this.versionprocessus = versionprocessus;
     
    	}
     
    	public void setModeleprocessusId(ModeleprocessusId id) {
     
    		System.out.println("ID modeleprocessus"+id.getNomprocessus());
    		System.out.println("Version modeleprocessus"+id.getVersionprocessus());
    		setId(id);
     
     
    	}
     
    	public ModeleprocessusId getModeleprocessusId() {
    		System.out.println("__________getmodeledeprocessusID()_________"+(ModeleprocessusId) getId());
     
    		return (ModeleprocessusId) getId();
    	}
     
    	public ModeleprocessusHome() {
    		setModeleprocessusId(new ModeleprocessusId());
    	}
     
    	@Override
    	public Modeleprocessus getInstance() {
    		System.out.println("__________getinstance()_________");
    		try {
    			super.getInstance();
    		} catch (Exception e) {
    			if (this.instance == null) {
    				this.instance=createInstance();
     
    			}
     
    		}
     
    		return this.instance;
    	}
     
     
    	@Override
    	protected Modeleprocessus createInstance() {
    		System.out.println("__________Modeleprocessus createInstance()_________");
    		Modeleprocessus modeleprocessus = new Modeleprocessus();
    		modeleprocessus.setId(new ModeleprocessusId());
    		if (modeleprocessus==null)		System.out.println("__________Modeleprocessus createInstance() NULL_________");
     
    		return modeleprocessus;
    	}
     
    	@In
    	EntityManager entityManager;
     
     
    	public void wire() {
    		getInstance();
    		if (getInstance()==null)		System.out.println("________________ Wire : instance NUll_________");
     
    	}
     
    	public boolean isWired() {
     
    		return true;
    	}
     
    	public Modeleprocessus getDefinedInstance() {
    		return isIdDefined() ? getInstance() : null;
    	}
     
    	public List<Activiteduprocessus> getActiviteduprocessuses() {
    		if (getInstance() == null)System.out.println("getInstance retourne Null");
    		return getInstance() == null ? null
    				: new ArrayList<Activiteduprocessus>(getInstance()
    						.getActiviteduprocessuses());
    	}
     
    	public List<Projet> getProjets() {
    		return getInstance() == null ? null : new ArrayList<Projet>(
    				getInstance().getProjets());
    	}
     
    	public String remove2() {
    		if (getInstance().getProjets().size() > 0) {
    			FacesMessages
    					.instance()
    					.add(
    							"impossible de supprimer: des projets utilisent ce modèle de processus!");
    			return "";
    		}
    		List<Activiteduprocessus> apros = new ArrayList<Activiteduprocessus>();
    		apros.addAll(getInstance().getActiviteduprocessuses());
    		for (Activiteduprocessus ap : apros) {
    			for (Succession s : ap.getSuccessions()) {
    				entityManager.remove(s);
    			}
    			entityManager.remove(ap);
    		}
    		remove();
    		return "/ModeleprocessusList.xhtml";
    	}
     
    	public String persist2() {
    		// Save
    		System.out.println("Persist2");
    		System.out.println("persist 2 : nom du processus"+this.getInstance().getId().getNomprocessus());
    		if (persist().isEmpty())
    			System.out.println("Persist 2 : persist is empty");
    		persist();
     
    		 //ajout START
     
    		 Activiteduprocessus aps=new Activiteduprocessus(); Activite
    		  as=(Activite)entityManager.createQuery("from Activite where nomactivite='START'") .getSingleResult();
    		 aps.setActiviteprocessus(0); aps.setActivite(as);
    		 aps.setDescrfiption("START"); aps.setModeleprocessus(getInstance());
    		  entityManager.persist(aps); //entityManager.refresh(getInstance());
     
    		  //ajout END
     
    		  Activiteduprocessus ape=new Activiteduprocessus(); Activite
    		  ae=(Activite)entityManager
    		  .createQuery("from Activite where nomactivite='END'") .getSingleResult();
    		 ape.setActiviteprocessus(1); ape.setActivite(ae); ape.setDescrfiption("END");
     
     
     
    		  ape.setModeleprocessus(getInstance()); entityManager.persist(ape);
     
     
    		entityManager.refresh(getInstance());
     
    		return "";
    	}
     
    }

    PS : Nomprocessus + VersionProcessus sont 2 paramètres incluses dans une classe ID , c'est pourquoi ils sont marqués comme commentaires.




    Merci de bien vouloir orienter mes efforts.

  2. #2
    Membre habitué
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut
    Le problème n'est pas très clairement énnoncé...

    De ce que j'arrive à lire entre les lignes, tu essayes de faire du CRUD sur un objet, donc là, de l'éditer.

    Ton erreur n'a rien à voir avoir de la navigation, Hibernate te dit que tu te balade avec un objet transient que tu essayes de sauver dans la base.
    Comme un EntityHome est en auto flush par défaut, dès que tu passes par une méthode et modifie un objet persistent (une entité quoi), il va essayer de la sauver dans la base si elle est attachée à ta base (=elle a un id, en gros).
    Donc je sais pas ce que fais ton bouton edit, mais clairement il appelle une méthode de ton EntityHome qui essaye de sauver un truc dans ta base de donnée.

    Il manque donc, au minimum, la méthode appelé par edit (qui peut etre dans le .page.xml correspondant à ta vue cible), et le bout de code de ta page JSF qui fait planter ton truc.

    Voila, si tu réponds je pourrais probablement t'aider:>

    Au passage, tes deux classes ne sont pas des Sessions Bean mais des POJO.

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