【问题标题】:How can I optimize Objectify relationships?如何优化 Objectify 关系?
【发布时间】:2017-04-11 20:04:01
【问题描述】:

我正在使用 Google App Engine 构建应用程序。我正在使用 Objectify 进行数据存储持久性。我有两个 POJO 类。

@Entity
public class Book
{
    @Id private Long id;
    private String name;
    private String isbn;
    private String author;
}

@Entity
public class Person {
    @Id private String email;
    private String password;
    private String name;
    private List<Book> myBooks;
}

一个人可以包含许多书,但书只属于一个人。目前我正在保存这样的数据。

//data from Front-end
Person p = new Person(email, password, name);
PersonDAO dao = new PersonDAO();
dao.save(p);

//...
//data from Front-end
Book b = new Book(name, author, isbn);
BookDAO daoBook = new BookDAO();
daoBook.save(b);

//...
Person q = dao.load(email);
q.addBook(b);
dao.save(q);

ObjectifyService ofy() 方法在 DAO 类中实现。

我的实施可以吗?如何优化关系?每次我需要创建一本书时,它都会像实体一样保存,但我需要与一个人的关系,因此我要保存两次。我见过 Key, Ref @Load 标签的实现,但我不知道它们是如何工作的。

此外,Person POJO 有一个 Date 字段。会正常保存吗?

【问题讨论】:

    标签: java google-app-engine objectify


    【解决方案1】:

    自从我写这段代码以来已经有一段时间了,但它是这样的:

    @Entity
    public class Book {
    
        @Id
        private Long id;
    
        @Parent
        @ApiResourceProperty(ignored = AnnotationBoolean.TRUE)
        private Key<User> user;
    
        private String author;
    
        private String isbn;
    
        private String name;
    
    }
    

    查看Udacity Conference Central 的完整示例。这是Developing Scalable Apps in Java with Google App Engine的最终项目,作者Udacity

    【讨论】:

    • 该代码可以用于识别所有者的书,但如果我想查找有一个人的书,我需要在每本书中进行搜索。不过,非常感谢。实际上,我正在开发一个 android 应用程序,您的示例代码和 udacity mooc 对我很有用。
    • 这是在UserBook 之间建立一对多关系的方式。您还可以创建索引以按特定字段进行搜索,例如user。不要忘记您需要在 Google App Engine 上创建索引并且它们是付费的。
    • 请更新您的问题描述以包括字段搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2012-10-11
    • 2019-08-24
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多