目前我的父類看起來是這樣,GAE/J數據存儲Presistent JDO刪除問題
public class UserVotesJDO {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String mediaId;
@Persistent(dependent="true")
private LikesJDO likes;
@Persistent(dependent="true")
private HatesJDO hates;
//使用getter和setter方法和其他變量 }
和我的孩子類hatesJDO看起來像
@PersistenceCapable(detachable = "true")
public class HatesJDO {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private int count;
private List<UserJDO> hatesUsersList;
}
其中UserJDO是另一個子類,它看起來像下面,
@PersistenceCapable(detachable="true")
public class UserJDO {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String userId;
@Persistent
private String userName;
@Persistent
private String fullName;
@Persistent
private String userEmail;
}
我的邏輯是,當我刪除UserVote我不再需要那些依賴孩子討厭和喜歡,而其UserJDO 所以當我嘗試刪除UserVotesJDO對象,我越來越控制檯的警告如下
Delete of [email protected] needs delete of related object at com.shoewars.jdo.ShoeWarsUserVotesJDO.hates but cannot delete it direct since FK is here
我dint得到這一點外鍵是目前提及或使用.....
任何人都可以幫助我解決這個問題!
因爲這是我的第一篇,我不知道如何正確地張貼,不管怎麼說,我將解釋什麼,我試圖做
我有一個JDO存儲的圖片ID,並在這些人的信息誰喜歡這幅圖片也贊成這個圖片
爲此目的,我創建了兩個JDO likesJDO和HatesJDO,分別存儲列表。
所以,當我節省約在JDO投票信息,下面的事情發生
獲取用戶信息,並在任恨UsersList相應地存儲或喜歡
這些一起添加到UserVote JDO與圖像ID
終於堅持它
現在,我的問題是,當我刪除UserVote JDO,我想在hatesJDO和likesJDO這些記錄被刪除的,爲什麼我已添加
@Persistent(dependent="true")
private LikesJDO likes;
@Persistent(dependent="true")
private HatesJDO hates;
這些線路
,但現在,我得到異常而這樣
堆棧跟蹤將是這樣的:
com.uservote.service.UserVotesOperations updateUserVoteForMedia: Cannot read fields from a deleted object
javax.jdo.JDOUserException: Cannot read fields from a deleted object
FailedObject:com.google.appengine.api.datastore.Key:UserVotesJDO(80003)/LikesJDO(1)/UserJDO(2001)
at org.datanucleus.api.jdo.state.PersistentDeleted.transitionReadField(PersistentDeleted.java:116)
at org.datanucleus.state.AbstractStateManager.transitionReadField(AbstractStateManager.java:838)
at org.datanucleus.state.JDOStateManager.isLoaded(JDOStateManager.java:1699)
at com.uservotes.jdo.UserJDO.jdoGetuserId(UserJDO.java)
at com.uservotes.jdo.UserJDO.getUserDTO(UserJDO.java:157)
at com.uservotes.service.InstagramApiService.convertToUserDtoList(InstagramApiService.java:555)
at com.uservotes.jdo.LikesJDO.getLikesDTO(LikesJDO.java:95)
at com.uservotes.jdo.uservotesUserVotesJDO.getuservotesUserVotesDTO(uservotesUserVotesJDO.java:109)
at com.uservotes.service.UserVotesOperations.updateUserVoteForMedia(UserVotesOperations.java:242)
at com.uservotes.service.UserVotesOperations.updateUserVoteForMediaList(UserVotesOperations.java:162)
at com.uservotes.controller.UserVotesController.hanldeUpdateUserVotesRequest(UserVotesController.java:111)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_$1.run(Method_.java:165)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.privilegedInvoke(Method_.java:163)
at com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.invoke_(Method_.java:124)
at com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.invoke(Method_.java:43)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:447)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:454)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:461)
at com.google.tracing.TraceContext.runInContext(TraceContext.java:703)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:338)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:330)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:458)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
at java.lang.Thread.run(Thread.java:679)
用任何異常記錄堆棧跟蹤將是必不可少的,正在使用的軟件版本,首先生成對象的持久性代碼以及刪除對象的持久性代碼。這將比發佈重複的問題更好http://stackoverflow.com/questions/14042628/how-to-delete-dependent-child-class-when-deleting-parent-jdo-in-google-app-engin – DataNucleus
既然我很長時間(大概1周)得到任何迴應,我想編輯標題更加相關,但忘記刪除舊的。謝謝 –
對這傢伙的任何幫助! –