[
https://issues.apache.org/jira/browse/OPENJPA-2429?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16983433#comment-16983433
]
Frej Bjon edited comment on OPENJPA-2429 at 11/27/19 11:27 AM:
---------------------------------------------------------------
It seems this bug can indeed show up even if all applicable fields have
@OrderBy-annotations. In the following abbreviated example, trying to update
(merge) an existing Element-entity after starting up the system results in this
same NPE. However, persisting an ElementGroup causes the relevant internal
metadata fields to be populated (i.e. {{_orderDec}}, and everything works after
that. There is no workaround that I can see short of using reflection to mess
with the OpenJPA internals. The patch by [~jmntn2000] should work in this case
too.
{noformat}
@Entity
public class Element {
@OneToMany(cascade=CascadeType.PERSIST, mappedBy="element",
fetch=FetchType.LAZY )
@OrderBy("order asc")
private List<PageElement> pageElement;
@Column(name = "NAME", length=255)
private String name;
@ManyToOne( fetch=FetchType.EAGER )
private ElementGroup elementGroup;
}
@Entity
public class PageElement {
@Column( name="ORDER" )
private Long order;
@ManyToOne( fetch=FetchType.EAGER )
private Element element;
}
@Entity
public class ElementGroup {
@OneToMany(cascade=CascadeType.ALL, mappedBy="elementGroup",
fetch=FetchType.EAGER )
@OrderBy("name asc")
private List<Element> element;
}
{noformat}
was (Author: fbjon):
It seems this bug can indeed show up even if all applicable fields have
@OrderBy-annotations. In the following abbreviated example, trying to update
(merge) an existing Element-entity after starting up the system results in this
same NPE. However, persisting an ElementGroup causes the relevant internal
metadata fields to be populated (i.e. {{_orderDec}}, and everything works after
that. There is no workaround that I can see short of using reflection to mess
with the OpenJPA internals.
{noformat}
@Entity
public class Element {
@OneToMany(cascade=CascadeType.PERSIST, mappedBy="element",
fetch=FetchType.LAZY )
@OrderBy("order asc")
private List<PageElement> pageElement;
@Column(name = "NAME", length=255)
private String name;
@ManyToOne( fetch=FetchType.EAGER )
private ElementGroup elementGroup;
}
@Entity
public class PageElement {
@Column( name="ORDER" )
private Long order;
@ManyToOne( fetch=FetchType.EAGER )
private Element element;
}
@Entity
public class ElementGroup {
@OneToMany(cascade=CascadeType.ALL, mappedBy="elementGroup",
fetch=FetchType.EAGER )
@OrderBy("name asc")
private List<Element> element;
}
{noformat}
> NPE was thrown out when a @OrderBy modified column is being persisted.
> ----------------------------------------------------------------------
>
> Key: OPENJPA-2429
> URL: https://issues.apache.org/jira/browse/OPENJPA-2429
> Project: OpenJPA
> Issue Type: Bug
> Components: datacache
> Affects Versions: 2.2.1
> Environment: Windows 7
> WebSphere 8.5
> Reporter: Kymair Wu
> Priority: Major
> Attachments: OpenJPA-2429.diff
>
>
> Following NPE was thrown out when a @OrderBy modified column is being
> persisted.
> {quote}
> Caused by: java.lang.NullPointerException
> at
> org.apache.openjpa.datacache.DataCachePCDataImpl.clearInverseRelationCache(DataCachePCDataImpl.java:179)
> at
> org.apache.openjpa.datacache.DataCachePCDataImpl.storeField(DataCachePCDataImpl.java:159)
> {quote}
> I notice that getOrderDeclaration() of FieldMetaData will return null when
> both _orders and _orderDec are null, which cause the NPE.
> The only place _orders will be set after class initialization seems to be
> getOrders()? But getOrders() is not involved for all the FieldMetaData of
> "fields[i].getInverseMetaDatas()"
> I'm not sure whether this is a OpenJPA issue but whether this NPE should be
> handled internally?
> Google returns a potential case but no more information found. See
> https://issues.apache.org/jira/browse/OPENJPA-2096?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
> and
> http://mail-archives.apache.org/mod_mbox/openjpa-users/201006.mbox/%[email protected]%3E
> Thanks!
--
This message was sent by Atlassian Jira
(v8.3.4#803005)