NPE saving entity with embedded bean

101 views
Skip to first unread message

claudio

unread,
Dec 1, 2010, 11:01:13 AM12/1/10
to Ebean ORM
Hi, I have a problem saving an object with an embedded bean.

If I change one or more fields in the entity AND fields in the
embedded bean then Ebean saves correcly.

If I change ONLY fields of the embedded bean (or no field) an save the
container entity I get a NPE.

I'm using Ebean 2.7.1, but in my logs i see: INFO: Ebean Version[2.7.0-
SNAPSHOT] Java Version[1.6.0_21]

Can you help?

Thanks

Claudio

Those are the classes

@Entity @Table(name="ASSOC_PERSONE")
public class AssociazionePersone implements Serializable {
@Id private Integer id;

@ManyToOne private TipoAssociazionePersone tipo;

@OneToMany(cascade=CascadeType.ALL, mappedBy="associazione")
@OrderBy(value="persona.dataNascita desc") @PrivateOwned
private List<AppartenenzaAssociazione> appartenenze;

@Embedded PeriodoTemporale validita;

@Column(length=500) private String note;

@Version private int updateCount;

... getters ... setters
}

@Embeddable
public class PeriodoTemporale implements Serializable {
@Temporal(TemporalType.DATE) private Date inizio;
@Temporal(TemporalType.DATE) private Date fine;

public PeriodoTemporale() {}
public PeriodoTemporale(Date inizio, Date fine) {
this.inizio = inizio;
this.fine = fine;
}

... getters ... setters
}

Here is the log of Ebean starting

1-dic-2010 16.35.50
com.avaje.ebeaninternal.server.core.BootupClassPathSearch search
INFO: Classpath search hits in jars[ebean-2.7.1.jar]
pkgs[ares.model.sportellosociale, ares.model.anagrafica,
ares.model.prestazioni.contributi, ares.model.infopatrimoniali,
com.avaje.ebean.meta, ares.model, ares.model.comunicazioni,
ares.model.prestazioni.proposta, ares.model.agenda,
ares.model.prestazioni.domanda, ares.model.prestazioni.servizi,
com.avaje.ebeaninternal.server.bean, ares.model.prestazioni,
ares.model.accessi] searchTime[391]
1-dic-2010 16.35.50
com.avaje.ebeaninternal.server.lib.sql.DataSourcePool initialise
INFO: DataSourcePool [ares] autoCommit[false]
transIsolation[READ_COMMITTED] min[2] max[20]
1-dic-2010 16.35.51
com.avaje.ebeaninternal.server.subclass.SubClassManager$1 run
INFO: SubClassFactory parent ClassLoader
[org.apache.catalina.loader.WebappClassLoader]
1-dic-2010 16.35.51
com.avaje.ebeaninternal.server.type.DefaultTypeManager
initialiseJodaTypes
INFO: Registering Joda data types
1-dic-2010 16.35.52 com.avaje.ebeaninternal.server.deploy.DeployOrmXml
findAllOrmXml
INFO: No deployment xml (orm.xml etc) was loaded.
1-dic-2010 16.35.52
com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager logStatus
INFO: Entities enhanced[52] subclassed[3]
1-dic-2010 16.35.52
com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager logStatus
AVVERTENZA: Mixing enhanced and subclassed entities. Subclassed
classes:[MetaAutoFetchStatistic, MetaQueryStatistic,
MetaAutoFetchTunedQueryInfo]
1-dic-2010 16.35.53
com.avaje.ebeaninternal.server.autofetch.DefaultAutoFetchManagerLogging
logToJavaLogger
INFO: AutoFetch queryTuning[false] profiling[false]
mode[DEFAULT_ONIFEMPTY] profiling rate[0.05] min[1] base[10]
1-dic-2010 16.35.53 com.avaje.ebean.Ebean <clinit>
INFO: Ebean Version[2.7.0-SNAPSHOT] Java Version[1.6.0_21]

and this is the Stack trace

org.apache.wicket.WicketRuntimeException: Method onFormSubmitted of
interface org.apache.wicket.markup.html.form.IFormSubmitListener
targeted at component [MarkupContainer [Component id = form]] threw an
exception
at
org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:
193)
at
org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget.processEvents(ListenerInterfaceRequestTarget.java:
73)
at
org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:
92)
at
org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:
1250)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
at
org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:
484)
at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:
317)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
298)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
852)
at org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
489)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:
182)
... 20 more
Caused by: java.lang.NullPointerException
at
com.avaje.ebeaninternal.server.core.PersistRequestBean.hasChanged(PersistRequestBean.java:
646)
at
com.avaje.ebeaninternal.server.persist.dmlbind.BindableProperty.addChanged(BindableProperty.java:
45)
at
com.avaje.ebeaninternal.server.persist.dmlbind.BindableList.addChanged(BindableList.java:
41)
at
com.avaje.ebeaninternal.server.persist.dml.UpdateMeta.getDynamicUpdatePlan(UpdateMeta.java:
180)
at
com.avaje.ebeaninternal.server.persist.dml.UpdateMeta.getUpdatePlan(UpdateMeta.java:
125)
at
com.avaje.ebeaninternal.server.persist.dml.UpdateHandler.bind(UpdateHandler.java:
54)
at
com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.execute(DmlBeanPersister.java:
98)
at
com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.update(DmlBeanPersister.java:
85)
at
com.avaje.ebeaninternal.server.persist.DefaultPersistExecute.executeUpdateBean(DefaultPersistExecute.java:
110)
at
com.avaje.ebeaninternal.server.core.PersistRequestBean.executeNow(PersistRequestBean.java:
449)
at
com.avaje.ebeaninternal.server.core.PersistRequestBean.executeOrQueue(PersistRequestBean.java:
475)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.update(DefaultPersister.java:
410)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.saveEnhanced(DefaultPersister.java:
330)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.saveRecurse(DefaultPersister.java:
302)
at
com.avaje.ebeaninternal.server.persist.DefaultPersister.save(DefaultPersister.java:
269)
at
com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:
1537)
at
com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:
1527)
at com.avaje.ebean.Ebean.save(Ebean.java:538)
at ares.ui.anagrafica.nucleifamiliari.NucleoFamiliarePage
$1.salva(NucleoFamiliarePage.java:56)
at wicketutils.formcommands.FormCommands$1.onSubmit(FormCommands.java:
37)
at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:
1561)
at org.apache.wicket.markup.html.form.Form.process(Form.java:958)
at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:
920)
... 25 more

Rob Bygrave

unread,
Dec 2, 2010, 2:50:19 AM12/2/10
to eb...@googlegroups.com
>> I'm using Ebean 2.7.1, but in my logs i see: INFO: Ebean Version[2.7.0- SNAPSHOT]

Yes - Ebean is reporting the wrong version (a bug there).


>> If I change ONLY fields of the embedded bean (or no field) an save the
>> container entity I get a NPE.

This is the same as Bug 331. http://www.avaje.org/bugdetail-331.html
... which was found and fixed by Mario in version 2.7.0. The
associated test case (com.avaje.tests.basic.TestDynamicUpdate) passes
(I ran it again manually via Eclipse). I have looked again at the
test case and it definately covers this scenario.

Specifically the save on line 27 of TestDynamicUpdate ...

http://ebeanorm.svn.sourceforge.net/viewvc/ebeanorm/ebean/trunk/src/test/java/com/avaje/tests/basic/TestDynamicUpdate.java?revision=1203&view=markup

... can you spot a difference with this test case or produce a new
failing test case?


Thanks, Rob.

claudio

unread,
Dec 2, 2010, 11:13:51 AM12/2/10
to Ebean ORM
Hi Rob, I found the problem shows only when I use
Ebean.refresh(bean).
In my code I refreshed the bean, then applied the changes from the
user interface and eventually saved the bean.
If I take out the refresh I have no errors (the refresh was misplaced,
I needed refreshMany).

I'm uploading a simple test case that shows the error, but here is the
code that fails:

Outer loaded = Ebean.find(Outer.class).findUnique();

// if commented Ebean saves correctly
Ebean.refresh(loaded);

loaded.getEmbeddedBean().setDate2(new Date());

// fails
Ebean.save(loaded);

I have another little problem with orderBy (also in the code I'm
uploading): I get an error if I try to order using an embedded field
in a related bean

// fails
Ebean.find(Inner.class).join("outer").orderBy("outer.embeddedBean.date1").findList();

Is it a bug?

Many thanks

Claudio

Rob Bygrave

unread,
Dec 2, 2010, 3:05:59 PM12/2/10
to eb...@googlegroups.com
Ok, great - I'll try that test over the weekend.


>> orderBy("outer.embeddedBean.date1").findList();

Yes, I think that will be a bug... I'll have a look at the same time as the save issue.


Cheers, Rob.

Rob Bygrave

unread,
Dec 3, 2010, 4:25:00 AM12/3/10
to eb...@googlegroups.com
I'm having trouble downloading the test.zip file.  I can't remember but maybe google groups has trouble with zip files ...

Can you try uploading it with a different extension?

claudio

unread,
Dec 3, 2010, 9:46:55 AM12/3/10
to Ebean ORM
Renamed to test.zop

Claudio

Rob Bygrave

unread,
Dec 5, 2010, 5:07:06 AM12/5/10
to eb...@googlegroups.com
Logged the first one as ... BUG 343 : NPE when Update only Embedded bean after a refresh()

... and fixed in HEAD.

I haven't got around to the orderBy issue yet - so hopefully get to that tomorrow night.

On Sat, Dec 4, 2010 at 3:46 AM, claudio <claudio....@gmail.com> wrote:
Renamed to test.zop

Claudio

Rob Bygrave

unread,
Dec 9, 2010, 5:41:21 AM12/9/10
to eb...@googlegroups.com
FYI: Both fixed in HEAD now BUG 343 and 344.
Reply all
Reply to author
Forward
0 new messages