我使用Objectify
有以下架构@Entity
public class Book{
@Id
private long id;
private Key<Page> pages;
…
}
@Entity
public class Page{
@Id
private String id;
…
public Page(Book book,int pageNumber){
this.id = book.getId()+””+pageNumber;
…
}
}
我收到了投诉
com.googlecode.objectify.LoadException:加载错误 书(1401058017250)/页(“14010580172505639445604728832”):已加载 实体有父,但com.company.api.db.Page没有@Parent
引起:java.lang.IllegalStateException:已加载的实体具有父级 但是com.company.api.db.Page没有@Parent
我来自Eclipse和Datanucleus,在该框架中代码是
@Entity
public class Book{
@Id
private long id;
private List<Page> pages;
…
}
@Entity
public class Page{
@Id
private Key key;
…
public Page(Book book,int pageNumber){
this.key = createKey(book.getId(),pageNumber);
…
}
private Key createKey(long bookId, long pageNumber) {
Key bookKey = KeyFactory.createKey(Book.class.getSimpleName(), bookId);
Key key = KeyFactory.createKey(bookKey, Page.class.getSimpleName(), bookId + "" + pageNumber);
return key;
}
}
它是否是最好的代码,它曾经工作过。所以无论如何,我正在迁移到Objectify和Android Studio。如何重写此架构以便我不再收到错误?如果有人确实知道答案,请复制并粘贴我的代码段并进行相应的修改。
答案 0 :(得分:1)
在旧代码中,您将bookKey标记为父实体。在新代码中,您需要:
@Parent
Key<Book> parentBook;
您的新课程应该是:
@Entity
public class Book{
@Id
private long id;
private List<Key<Page>> pages;
…
}
@Entity
public class Page{
@Id
private String id;
@Parent
Key<Book> parentBook;
…
public Page(long bookId, int pageNumber){
this.id = bookId + ”” +pageNumber;
this.parentBook = Key.create(Book.class, bookId);
…
}
}
在此处阅读有关键和客观化的更多信息:https://code.google.com/p/objectify-appengine/wiki/Concepts#Keys