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 :
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)
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();
}
} |
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.
Partager