4

This problem appears randomly. Program has worked well for over a month and today it crashed. While adding a new order the user can choose a company from the dropdown list. Then he can save new order to the database. It works most of the times even now when a reloaded the app. The error code is as follows:

javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: mapped.Order.company (odwzorowania.Zlecenie.firma)

Using Hibernate, JSF 2.1, MySql 5.5, javax.persistence.*

here is the code (names are translated from polish)

public void update(Order order) throws AdException
{
    try
    {
        begin();

            Company fir2 = order.getCompany();

            em.merge(fir2);
            em.merge(order);

        commit();
    }
    catch( HibernateException e )
    {
        rollback();
        throw new AdException("Nie mozna zaktualizować zlecenia",e);
    }
}

Order entity

    import javax.persistence.* //fixed in real code

    @Entity
    @Table(name = "order")


    public class Order implements Serializable {
    private static final long serialVersionUID = 1L;

    private Integer idOrder;
    private Company company;
    [...]

    @JoinColumn(name = "company_idCompany", referencedColumnName = "idCompany")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }
    [...]

Company entity

import javax.persistence.*

@Entity
@Table(name = "company")

public class Company implements Serializable {

private static final long serialVersionUID = 1L;

private Integer idCompany;       
private List<Order> orderList;
[...]

@OneToMany(mappedBy = "company", fetch = FetchType.LAZY)
public List<Order> getOrderList() {
    return orderList;
}

public void setOrderList(List<Order>orderList) {
    this.orderList = orderList;
}
[...]

stack trace ( mapped.Order.company is the same as odwzorowania.Zlecenie.firma translated from polish)

2012-xx-xx xx:xx:xx com.sun.faces.application.ApplicationImpl newThing
SEVERE: Unable to load class: 
javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: odwzorowania.Zlecenie.firma
    at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:74)
    at controllery.FirmaController.get(FirmaController.java:84)
    at validatory.FirmyValidator.<init>(FirmyValidator.java:32)
    at sun.reflect.GeneratedConstructorAccessor154.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at java.lang.Class.newInstance0(Class.java:372)
    at java.lang.Class.newInstance(Class.java:325)
    at com.sun.faces.application.ApplicationImpl.newThing(ApplicationImpl.java:1699)
    at com.sun.faces.application.ApplicationImpl.createValidator(ApplicationImpl.java:1557)
    at com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.createValidator(ValidatorTagHandlerDelegateImpl.java:238)
    at com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyAttachedObject(ValidatorTagHandlerDelegateImpl.java:132)
    at com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyNested(ValidatorTagHandlerDelegateImpl.java:205)
    at com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.apply(ValidatorTagHandlerDelegateImpl.java:87)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:188)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:188)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:188)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:86)
    at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:152)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:769)
    at com.sun.faces.application.view.StateManagementStrategyImpl.restoreView(StateManagementStrategyImpl.java:232)
    at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:188)
    at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:452)
    at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:148)
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:192)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:636)
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: odwzorowania.Zlecenie.firma
    at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
    at org.hibernate.event.def.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:270)
    at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:128)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
    at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:35)
    at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:65)
    ... 58 more

I have found some answers but none of them seems to fit my problem. As you can see I'm updating both sides of bi-directional assocation between company and order.

edit: fixed translation

Kukeltje
  • 12,223
  • 4
  • 24
  • 47
Rafał Rowiński
  • 606
  • 1
  • 11
  • 23

1 Answers1

0

I think that relationship between the entity Company and the entity Order is the cause of your problem. The entity Order haven't Company.

A question, order.getCompany() could be null during your tests? Your mapping of the entity Order is:

@ManyToOne(**optional = false**, fetch = FetchType.LAZY)

I see that the field Company is required in the entity Order.

Regards

esmoreno
  • 658
  • 5
  • 12
  • company is firma in polish. I might have done some mistakes while translating. All i wanted to do is to translate the names from polish to english. I might have forgotten about some – Rafał Rowiński Jun 26 '12 at 14:25
  • Yes it is required. There are entity's of company in the database and to save an order you have to choose the company from dropdown list that it belongs to. It is impossible to delete a company from the database so there are no orphans. The problem is that sometimes this error appears and it seems quite random. I had a problem with dropdown list as it shown null pointer exception but it's already fixed due to converters. I can't trace the error here and it shuts down the whole app even though I have a try catch there. Maybe I'm catching the wrong exception. – Rafał Rowiński Jun 27 '12 at 13:59
  • Entity order has got a field company `public class Order implements Serializable { private static final long serialVersionUID = 1L; private Integer idOrder; private Company company;` – Rafał Rowiński Jun 27 '12 at 14:09
  • Your operations are into a long trasaction? Is possible that the value to save is trasient(invalid value for be old value or exist previous modifications during the operation). And if do you refresh Company before of update() operation? Change values o only change Order? – esmoreno Jun 27 '12 at 15:14
  • what's a long transaction? Companys are unchangable – Rafał Rowiński Jun 28 '12 at 23:15
  • therefore I don't have to refresh company's before updating. You can only change the values of an order. – Rafał Rowiński Jun 28 '12 at 23:17
  • I think your problem is similar to these: http://stackoverflow.com/questions/1104063/hibernate-bidirectional-parent-child-problem and http://stackoverflow.com/questions/6389600/not-null-property-references-a-null-or-transient-value?rq=1. Regards – esmoreno Jun 29 '12 at 07:00