1

現在、私の親クラスは次のようになっています。

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 およびその他の変数を使用 }

私の子クラスはJDOが嫌いです

@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 com.shoewars.jdo.UserVotesJDO@8b4163 needs delete of related object at com.shoewars.jdo.ShoeWarsUserVotesJDO.hates but cannot delete it direct since FK is here

私はこの点を理解していません外部キーは現在参照または使用されています.....

誰でもこの問題を解決するのを手伝ってくれますか!

これは私の最初の投稿だったので、適切に投稿する方法がわかりませんが、とにかく、私がやろうとしていることを説明します

私は画像IDを保存するJDOを持っており、この画像が好きな人やこの画像が嫌いな人の情報を持っています

この目的のために、リストを別々に保存するために、さらに 2 つの JDO likesJDO と HatesJDO を作成しました。

そのため、投票に関する情報をjdoに保存すると、次のことが起こります

  1. ユーザー情報を取得し、それに応じて嫌いまたは好きのUsersListに保存します

  2. これらをイメージ ID とともに UserVote JDO に追加します

  3. 最後にそれを維持する

さて、私の問題は、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)
4

1 に答える 1

0

Lazy Load に関連するもののようです。削除の直前に (getLikes() & getHates() によって) いいね & ヘイトにアクセスしてみてください。

于 2014-07-01T13:07:46.603 に答える