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.