[jboss-user] [EJB 3.0] - Re: Cannot remove entites used in relationships

valatharv do-not-reply at jboss.com
Tue Dec 2 15:23:34 EST 2008


I need help while deleting child entity, please suggest how can I handle it. I tried posting in seam forum but that is not the right place..

I am stuck and need help... :( new to this... 

Entity Overview :
-Project entity can have multiple QuantExperiments. 
-QuantExperiment entity can have multiple Reagents and 
-Reagent entity can have multiple Treatments.

As per functionalities user can CREATE, UPDATE or DELETE any entity from UI.

I created few Treatments for Reagents and few reagents for experiments, etc.

Now, when I try to delete only ONE treatment from Treatment home it gives exception as :
----------------------
Caused by: javax.persistence.EntityNotFoundException: deleted entity passed to persist: [com.entity.Treatment#]
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:613)
	at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:299)
	at org.jboss.seam.persistence.EntityManagerProxy.flush(EntityManagerProxy.java:90)
	at org.jboss.seam.framework.EntityHome.remove(EntityHome.java:108)
	at com.TreatmentHome.remove(TreatmentHome.java:86)----------------------

I think it is issue with CascadeType but not able to figure out. "TreatmentHome.remove()" is called while (deleting)

I tried using various combinations for CascadeType like using but no success.
"CascadeType.MERGE,CascadeType.REFRESH,CascadeType.REMOVE" on Reagent.getTreatment() and Treatment.getReagent()

Project entity :
  | ----------------
  | public class Project
  |     implements Equals, HashCode, ToString{
  | ......
  | 
  | protected List<QuantExperiment> quantExperiment;
  | 
  | @OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy="project")
  | public List<QuantExperiment> getQuantExperiment() {
  |  if (quantExperiment == null) {
  |   quantExperiment = new ArrayList<QuantExperiment>();
  |  }
  |  return this.quantExperiment;
  | }
  | 
  |  public void setQuantExperiment(List<QuantExperiment> quantExperiment) {
  | 	for(QuantExperiment q : quantExperiment){
  | 		q.setProject(this);
  | 	}
  | 	this.quantExperiment = quantExperiment;
  | }
QuantExperiment entity :
  | ------------------------
  | public class QuantExperiment
  |     implements Equals, HashCode, ToString {
  | ......
  | protected List<Reagent> reagent;
  | protected Project project;
  | 
  | @OneToMany(cascade = {CascadeType.ALL}, , fetch = FetchType.LAZY, mappedBy="quantExperiment")
  | public List<Reagent> getReagent() {
  |  if (reagent == null) {
  |   reagent = new ArrayList<Reagent>();
  |  }
  |  return this.reagent;
  | }
  | 
  | public void setReagent(List<Reagent> reagent) {
  | 	for(Reagent r : reagent){
  | 		r.setQuantExperiment(this);
  | 	}
  | 	this.reagent = reagent;
  | }
  | 
  | @ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, optional=false)
  | public Project getProject() {
  |  return project;
  | }
  | public void setProject(Project project) {
  | 	this.project = project;
  | }

Reagent entity :
  | ----------------
  | public class Reagent
  |     implements Equals, HashCode, ToString {
  | ....
  | protected List<Treatment> treatment;
  | protected QuantExperiment quantExperiment;
  | 
  | @OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy="reagent") 
  | public List<Treatment> getTreatment() {
  |  if (treatment == null) {
  |   treatment = new ArrayList<Treatment>();
  |  }
  |  return this.treatment;
  | }
  | public void setTreatment(List<Treatment> treatment) {
  | 	for(Treatment t : treatment){
  | 		t.setReagent(this);
  | 	}
  | 	this.treatment = treatment;
  | }
  | 
  | @ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, optional=false)
  | public QuantExperiment getQuantExperiment() {
  |  return quantExperiment;
  | }
  | public void setQuantExperiment(QuantExperiment quantExperiment) {
  | 	this.quantExperiment = quantExperiment;
  | }

Treatment entity :
  | ------------------
  | public class Treatment
  |     implements Equals, HashCode, ToString {
  | ......
  | protected Reagent reagent;
  | @ManyToOne(cascade = {CascadeType.ALL},optional=false)
  | public Reagent getReagent() {
  |  return reagent;
  | }
  | public void setReagent(Reagent reagent) {
  | 	this.reagent = reagent;
  | }
TreatmentHome.java
  | ------------------
  | @Name("treatmentHome")
  | public class TreatmentHome extends EntityHome<Treatment> {
  | 
  | @In(create = true)
  | ReagentHome reagentHome;
  | .....
  | 
  | @Override
  | public String remove(){
  | 	return super.remove();
  | }
  | .... 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4193866#4193866

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4193866



More information about the jboss-user mailing list