cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Savva Kolbachev (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CAY-2097) NullPointerException while updating relationships for entities with vertical inheritance
Date Fri, 05 Aug 2016 11:29:20 GMT

     [ https://issues.apache.org/jira/browse/CAY-2097?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Savva Kolbachev updated CAY-2097:
---------------------------------
    Description: 
Forwarded from mail list:

I have a class Company with a one-to-many relationship to other Companies (parentCompany <-
subCompanies). I’m able to set a Company’s parent when creating one, but upon update I’m
getting a NullPointerException in DefaultQuotingStrategy.quotedName because it’s been sent
a null attribute. Company extends the abstract class Entity; on the DB side Entity and Company
have a one-to-one relationship, and Entity has a parentEntity reference (which is modeled
as parentCompany). The obj-relationship parentCompany is set up with the target Company and
path parentEntity.

The null attribute is being added in org.apache.cayenne.access.DataDomainUpdateBucket.updatedAttributes.
The method is called first with the dbEntity Entity and the an updatedSnapshot containing
parentEntity, which is what I would expect. However, after this updatedAttributes is called
with Company and an updatedSnapshot containing parentEntity, so the following line

attributes.add(entityAttributes.get(name))

will return a null attribute when trying to get the name “parentEntity” off Company’s
attributes; that attribute only exists on Entity. I’d appreciate any help on preventing
it from trying to add invalid attributes.

Here’s the stack trace:

java.lang.NullPointerException
        at org.apache.cayenne.dba.DefaultQuotingStrategy.quotedName(DefaultQuotingStrategy.java:62)
        at org.apache.cayenne.access.translator.batch.UpdateBatchTranslator.createSql(UpdateBatchTranslator.java:60)
        at org.apache.cayenne.access.translator.batch.DefaultBatchTranslator.ensureTranslated(DefaultBatchTranslator.java:52)
        at org.apache.cayenne.access.translator.batch.DefaultBatchTranslator.getSql(DefaultBatchTranslator.java:64)
        at org.apache.cayenne.access.jdbc.BatchAction.runAsBatch(BatchAction.java:103)
        at org.apache.cayenne.access.jdbc.BatchAction.performAction(BatchAction.java:90)
        at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:97)
        at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:293)
        at org.apache.cayenne.access.DataDomainFlushAction.runQueries(DataDomainFlushAction.java:233)
        at org.apache.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushAction.java:154)
        at org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:693)
        at org.apache.cayenne.access.DataDomain$2.transform(DataDomain.java:659)
        at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:720)
        at org.apache.cayenne.access.DataDomain.onSyncNoFilters(DataDomain.java:655)
        at org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:863)
        at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:636)
        at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:727)
        at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:676)

  was:
Forwarded from mail list:
{noformat}
I have a class Company with a one-to-many relationship to other Companies (parentCompany <-
subCompanies). I’m able to set a Company’s parent when creating one, but upon update I’m
getting a NullPointerException in DefaultQuotingStrategy.quotedName because it’s been sent
a null attribute. Company extends the abstract class Entity; on the DB side Entity and Company
have a one-to-one relationship, and Entity has a parentEntity reference (which is modeled
as parentCompany). The obj-relationship parentCompany is set up with the target Company and
path parentEntity.

The null attribute is being added in org.apache.cayenne.access.DataDomainUpdateBucket.updatedAttributes.
The method is called first with the dbEntity Entity and the an updatedSnapshot containing
parentEntity, which is what I would expect. However, after this updatedAttributes is called
with Company and an updatedSnapshot containing parentEntity, so the following line

attributes.add(entityAttributes.get(name))

will return a null attribute when trying to get the name “parentEntity” off Company’s
attributes; that attribute only exists on Entity. I’d appreciate any help on preventing
it from trying to add invalid attributes.

Here’s the stack trace:

java.lang.NullPointerException
        at org.apache.cayenne.dba.DefaultQuotingStrategy.quotedName(DefaultQuotingStrategy.java:62)
        at org.apache.cayenne.access.translator.batch.UpdateBatchTranslator.createSql(UpdateBatchTranslator.java:60)
        at org.apache.cayenne.access.translator.batch.DefaultBatchTranslator.ensureTranslated(DefaultBatchTranslator.java:52)
        at org.apache.cayenne.access.translator.batch.DefaultBatchTranslator.getSql(DefaultBatchTranslator.java:64)
        at org.apache.cayenne.access.jdbc.BatchAction.runAsBatch(BatchAction.java:103)
        at org.apache.cayenne.access.jdbc.BatchAction.performAction(BatchAction.java:90)
        at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:97)
        at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:293)
        at org.apache.cayenne.access.DataDomainFlushAction.runQueries(DataDomainFlushAction.java:233)
        at org.apache.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushAction.java:154)
        at org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:693)
        at org.apache.cayenne.access.DataDomain$2.transform(DataDomain.java:659)
        at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:720)
        at org.apache.cayenne.access.DataDomain.onSyncNoFilters(DataDomain.java:655)
        at org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:863)
        at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:636)
        at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:727)
        at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:676)
{noformat}


> NullPointerException while updating relationships for entities with vertical inheritance
> ----------------------------------------------------------------------------------------
>
>                 Key: CAY-2097
>                 URL: https://issues.apache.org/jira/browse/CAY-2097
>             Project: Cayenne
>          Issue Type: Bug
>    Affects Versions: 4.0.M3
>            Reporter: Savva Kolbachev
>            Assignee: Savva Kolbachev
>             Fix For: 4.0.M4
>
>
> Forwarded from mail list:
> I have a class Company with a one-to-many relationship to other Companies (parentCompany
<- subCompanies). I’m able to set a Company’s parent when creating one, but upon update
I’m getting a NullPointerException in DefaultQuotingStrategy.quotedName because it’s been
sent a null attribute. Company extends the abstract class Entity; on the DB side Entity and
Company have a one-to-one relationship, and Entity has a parentEntity reference (which is
modeled as parentCompany). The obj-relationship parentCompany is set up with the target Company
and path parentEntity.
> The null attribute is being added in org.apache.cayenne.access.DataDomainUpdateBucket.updatedAttributes.
The method is called first with the dbEntity Entity and the an updatedSnapshot containing
parentEntity, which is what I would expect. However, after this updatedAttributes is called
with Company and an updatedSnapshot containing parentEntity, so the following line
> attributes.add(entityAttributes.get(name))
> will return a null attribute when trying to get the name “parentEntity” off Company’s
attributes; that attribute only exists on Entity. I’d appreciate any help on preventing
it from trying to add invalid attributes.
> Here’s the stack trace:
> java.lang.NullPointerException
>         at org.apache.cayenne.dba.DefaultQuotingStrategy.quotedName(DefaultQuotingStrategy.java:62)
>         at org.apache.cayenne.access.translator.batch.UpdateBatchTranslator.createSql(UpdateBatchTranslator.java:60)
>         at org.apache.cayenne.access.translator.batch.DefaultBatchTranslator.ensureTranslated(DefaultBatchTranslator.java:52)
>         at org.apache.cayenne.access.translator.batch.DefaultBatchTranslator.getSql(DefaultBatchTranslator.java:64)
>         at org.apache.cayenne.access.jdbc.BatchAction.runAsBatch(BatchAction.java:103)
>         at org.apache.cayenne.access.jdbc.BatchAction.performAction(BatchAction.java:90)
>         at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:97)
>         at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:293)
>         at org.apache.cayenne.access.DataDomainFlushAction.runQueries(DataDomainFlushAction.java:233)
>         at org.apache.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushAction.java:154)
>         at org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:693)
>         at org.apache.cayenne.access.DataDomain$2.transform(DataDomain.java:659)
>         at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:720)
>         at org.apache.cayenne.access.DataDomain.onSyncNoFilters(DataDomain.java:655)
>         at org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:863)
>         at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:636)
>         at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:727)
>         at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:676)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message