2017-12-26 7 views
0

Ich benutze DataNucleus und JDO. Um das Schema für "Tabellen" während des Persistenzprozesses zu erstellen, verwende ich datanucleus.schema.autoCreateAll=true, um DataNucleus anzuweisen, Schema automatisch zu erstellen. Sobald ich der Tabelle enty gemacht habe, versucht jeder Versuch, Feld zu den Modellresultaten org.neo4j.graphdb.NotFoundException: NODE[68] has no property with propertyKey="newFieldName" hinzuzufügen.Wie fügt man der Neo4j-Datenbank eine Eigenschaft hinzu Tabelle, die einen Eintrag (DataNucleus) enthält?

Was ist der beste Weg zum Ändern oder Hinzufügen von Eigenschaften zu einer Tabelle, die bereits Einträge enthält?

Dies ist der Stack-Trace.

2017-12-27 13:46:08.509 [qtp1955990522-68] Query - JDOQL Query : Executing "SELECT FROM com.hope.tub.neo4j.jdo.model.Product WHERE name.equals(value) PARAMETERS String value" ... 
2017-12-27 13:46:08.509 [qtp1955990522-68] Native - Retrieving objects of type com.hope.tub.neo4j.jdo.model.Product using Cypher query : START this=node:DN_TYPES(class="com.hope.tub.neo4j.jdo.model.Product") RETURN this 
[INFO ] 2017-12-27 13:46:08.537 [qtp1955990522-68] Query - Reading in results for query "SELECT FROM com.hope.tub.neo4j.jdo.model.Product WHERE name.equals(value) PARAMETERS String value" since the connection used is closing/committing 
2017-12-27 13:46:08.539 [qtp1955990522-68] Cache - Object with id "com.hope.tub.neo4j.jdo.model.Product:11" not found in Level 1 cache 
2017-12-27 13:46:08.540 [qtp1955990522-68] Cache - Object "[email protected]" (id="com.hope.tub.neo4j.jdo.model.Product:11") added to Level 1 cache (loadedFlags="[NNNYNNNNNNN]") 
2017-12-27 13:46:08.567 [qtp1955990522-68] Connection - Managed connection org.data[email protected]7e678a93 [[email protected], commitOnRelease=true, closeOnRelease=true, closeOnTxnEnd=false] is committing 
2017-12-27 13:46:08.567 [qtp1955990522-68] Connection - Managed connection org.data[email protected]7e678a93 [[email protected], commitOnRelease=true, closeOnRelease=true, closeOnTxnEnd=false] committed connection 
2017-12-27 13:46:08.568 [qtp1955990522-68] Persistence - Disconnecting [email protected] from StateManager[[email protected], lifecycle=HOLLOW] 
2017-12-27 13:46:08.568 [qtp1955990522-68] Cache - Level 1 Cache cleared 
2017-12-27 13:46:08.568 [qtp1955990522-68] Persistence - ExecutionContext CLOSED "[email protected]" 
2017-12-27 13:46:08.568 [qtp1955990522-68] Transaction - Transaction rolling back for ExecutionContext [email protected] 
2017-12-27 13:46:08.568 [qtp1955990522-68] Transaction - Rolling back [DataNucleus Transaction, ID=1608044257-5, enlisted resources=[]] 
2017-12-27 13:46:08.568 [qtp1955990522-68] Transaction - Transaction rolled back in 0 ms 
2017-12-27 13:46:08.569 [qtp1955990522-68] Persistence - ExecutionContext CLOSED "[email protected]" 
Dec 27, 2017 1:46:08 PM com.hope.tub.servlets.TuCreateServlet doPost 
SEVERE: null 
org.neo4j.graphdb.NotFoundException: NODE[11] has no property with propertyKey="creatorID". 
at org.neo4j.kernel.impl.core.NodeProxy.getProperty(NodeProxy.java:479) 
at  org.datanucleus.store.neo4j.fieldmanager.FetchFieldManager.fetchLongField(FetchFieldManager.java:157) 
at org.datanucleus.state.StateManagerImpl.replacingLongField(StateManagerImpl.java:1912) 
at com.hope.tub.neo4j.jdo.model.Product.dnReplaceField(Product.java) 
at com.hope.tub.neo4j.jdo.model.Product.dnReplaceFields(Product.java) 
at org.datanucleus.state.StateManagerImpl.replaceFields(StateManagerImpl.java:4286) 
at org.datanucleus.state.StateManagerImpl.replaceFields(StateManagerImpl.java:4311) 
at org.datanucleus.store.neo4j.Neo4jUtils$1.fetchFields(Neo4jUtils.java:605) 
at org.datanucleus.state.StateManagerImpl.loadFieldValues(StateManagerImpl.java:3719) 
at org.datanucleus.store.neo4j.Neo4jUtils.getObjectUsingApplicationIdForDBObject(Neo4jUtils.java:601) 
at org.datanucleus.store.neo4j.Neo4jUtils.getObjectForPropertyContainer(Neo4jUtils.java:565) 
at org.datanucleus.store.neo4j.query.LazyLoadQueryResult.getResultFromMapRow(LazyLoadQueryResult.java:153) 
at org.datanucleus.store.neo4j.query.LazyLoadQueryResult.closingConnection(LazyLoadQueryResult.java:136) 
at org.datanucleus.store.query.AbstractQueryResult.disconnect(AbstractQueryResult.java:105) 
at org.datanucleus.store.neo4j.query.JDOQLQuery.performExecute(JDOQLQuery.java:291) 
at org.datanucleus.store.query.Query.executeQuery(Query.java:1966) 
at org.datanucleus.store.query.Query.executeWithArray(Query.java:1855) 
at org.datanucleus.api.jdo.JDOQuery.executeInternal(JDOQuery.java:433) 
at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:276) 
at com.hope.tub.neo4j.jdo.services.impl.ProductNeo4jServiceImpl.findByName(ProductNeo4jServiceImpl.java:76) 
at com.hope.tub.neo4j.jdo.services.impl.ProductNeo4jServiceImpl.save(ProductNeo4jServiceImpl.java:90) 
at com.hope.tub.neo4j.jdo.services.impl.ProductNeo4jServiceImpl.save(ProductNeo4jServiceImpl.java:24) 
at com.hope.tub.access.beans.ProductBean.createProduct(ProductBean.java:135) 
at com.hope.tub.servlets.TuCreateServlet.createProduct(TuCreateServlet.java:107) 
at com.hope.tub.servlets.TuCreateServlet.doPost(TuCreateServlet.java:57) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1772) 
at com.hope.tub.filters.ValidateJsonAntiForgeryTokenFilter.doFilter(ValidateJsonAntiForgeryTokenFilter.java:254) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1751) 
at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:205) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFil[INFO ] 2017-12-27 13:46:08.571 [qtp1955990522-68]/- ValidateJsonAntiForgeryTokenFilter:DoAfterProcessing 
ter(ServletHandler.java:1759) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) 
at org.eclipse.jetty.server.handler.ContextHandler.__doHandle(ContextHandler.java:1180) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) 
at org.eclipse.jetty.server.Server.handle(Server.java:534) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320) 
at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:267) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: org.neo4j.kernel.api.exceptions.PropertyNotFoundException: NODE[11] has no property with propertyKeyId=29. 
at org.neo4j.kernel.impl.core.NodeProxy.getProperty(NodeProxy.java:471) 
... 50 more 

Initial Modell:

@PersistenceCapable(identityType = IdentityType.APPLICATION, cacheable = "false", detachable = "true") 
public class Product implements Serializable { 

private static final long serialVersionUID = 8269335445554701873L; 

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
long id; 
@Persistent 
private String name = null; 
... 

Jeder Versuch, neue Eigenschaft hinzuzufügen, wie dies unten, reproduziert den oben Stack-Trace.

... 
@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
long id; 
@Persistent 
private String name = null; 
@Persistent 
private long creatorID; 
... 
+0

warum nicht den Stack-Trace für diese Ausnahme buchen? weil eine Ausnahme ohne Wert Null ist – DN1

+0

@ DN1 Ich habe Stack-Trace und weitere Informationen hinzugefügt. Vielen Dank. – Hopecee

Antwort

0

Fehlende (Nicht-String-) Spalten werden derzeit nicht berücksichtigt. Das heißt, es wird davon ausgegangen, dass die Objekte, die in der Neo4j-Datenbank gespeichert sind, konsistent mit dem Modell sind, das zum Abrufen der Objekte verwendet wird.

Das ist in GitHub behoben. https://github.com/datanucleus/datanucleus-neo4j/issues/32

+0

Danke, @andyjefferson du machst das toll. – Hopecee

Verwandte Themen