Help - javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value
valatharv Nov 25, 2008 10:23 PMI have a function which adds fields of an entity, when I try to add on update screen it gives the following error, same thing works fine on create screen.
Error message:
--------------------------------------
Hibernate:
select
MET_TREATMENT_SEQ.nextval
from
dual
16:11:54,908 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@1abb373
javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.entity.Treatment.reagent
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:629)
-------------------------------------
a) This link calls quantExperimentHome.addTreatmentLink
<h:commandLink action="#{quantExperimentHome.addTreatmentLink}"
value="Add treatments" immediate="true">
<f:param name="re_hashcode" value="#{info.hashCode()}"/>
</h:commandLink>
quantExperimentHome.addTreatmentLink method
-------------------------------------------
public String addTreatmentLink(){
javax.faces.context.FacesContext facesContext = (new org.jboss.seam.faces.FacesContext()).getContext();
javax.servlet.http.HttpServletRequest hsr=(javax.servlet.http.HttpServletRequest)facesContext.getCurrentInstance().getExternalContext().getRequest();
String reagentHashcode=hsr.getParameter("re_hashcode");
for(int i=0;i<reagent1.length;i++){
if(reagent1[i].hashCode()==Integer.parseInt(reagentHashcode)){
reagent1[i].getTreatment().add(new Treatment());
break;
}
}
return "added";
}
b) Entities :
Reagent entity
--------------
public class Reagent
implements Equals, HashCode, ToString
{
protected List<Treatment> treatment;
protected QuantExperiment quantExperiment;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy="reagent")
@OrderBy
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(optional=false)
public QuantExperiment getQuantExperiment() {
return quantExperiment;
}
Treatment entity
----------------
public class Treatment
implements Equals, HashCode, ToString
{
protected Reagent reagent;
@ManyToOne(optional=false)
public Reagent getReagent() {
return reagent;
}
public void setReagent(Reagent reagent) {
this.reagent = reagent;
}
Error message:
--------------------------------------
Hibernate:
select
MET_TREATMENT_SEQ.nextval
from
dual
16:11:54,908 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@1abb373
javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.entity.Treatment.reagent
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:629)
-------------------------------------
a) This link calls quantExperimentHome.addTreatmentLink
<h:commandLink action="#{quantExperimentHome.addTreatmentLink}"
value="Add treatments" immediate="true">
<f:param name="re_hashcode" value="#{info.hashCode()}"/>
</h:commandLink>
quantExperimentHome.addTreatmentLink method
-------------------------------------------
public String addTreatmentLink(){
javax.faces.context.FacesContext facesContext = (new org.jboss.seam.faces.FacesContext()).getContext();
javax.servlet.http.HttpServletRequest hsr=(javax.servlet.http.HttpServletRequest)facesContext.getCurrentInstance().getExternalContext().getRequest();
String reagentHashcode=hsr.getParameter("re_hashcode");
for(int i=0;i<reagent1.length;i++){
if(reagent1[i].hashCode()==Integer.parseInt(reagentHashcode)){
reagent1[i].getTreatment().add(new Treatment());
break;
}
}
return "added";
}
b) Entities :
Reagent entity
--------------
public class Reagent
implements Equals, HashCode, ToString
{
protected List<Treatment> treatment;
protected QuantExperiment quantExperiment;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy="reagent")
@OrderBy
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(optional=false)
public QuantExperiment getQuantExperiment() {
return quantExperiment;
}
Treatment entity
----------------
public class Treatment
implements Equals, HashCode, ToString
{
protected Reagent reagent;
@ManyToOne(optional=false)
public Reagent getReagent() {
return reagent;
}
public void setReagent(Reagent reagent) {
this.reagent = reagent;
}