1

假设我有两个域模型 Author 和 Book。所以作者可以有一本或多本书。

从锡耶纳的文档中,它似乎建议如下:

public class Author extends Model {

    @Id
    public Long id;

        public String name;


    public Book book;
}

但我期待的是这样的:

公共类作者扩展模型{

    @Id
    public Long id;

    public String name;

    public List<Books> books = new ArrayList<Book>();
}

因此,在我的代码中,我可以执行以下操作:

Book book1 = new Book(), boo2 = new Book();

作者作者=新作者();作者.books.add(book1); 作者.books.add(book2); 作者.插入();

但这似乎与Siena的文档不相符

问题是正确的解决方案是什么?

4

1 回答 1

2

请记住,Siena 基于 NoSQL 概念,因此没有 SQL 中的连接。无论如何,您可以自然地设计一个 one2many 关系。

在传统的锡耶纳,你会用自动查询这样写:

class Author {
...
 @Filter("author")
 public Query<Book> books; // this is called an "automatic-query"
...
}

class Book {
...
    Author author;
...
}

然后你会得到这样的书:

List<Book> booksBlabla = author.books.filter("your_field", "blabla").fetch();

当您使用 GAE 时,有一种新的直观语法,其中使用了许多文档: https ://github.com/mandubian/siena/blob/master/source/documentation/manuals/relation_syntax_many.textile

class Author {
...
   public Many<Book> books; // this is called an "automatic-query"
...
}

然后,您可以以列表或查询的形式访问这本书:

List<Book> theBooks = books.asList();
List<Book> theFilteredBooks = books.asQuery().filter("...", "...").fetch();

当你用书创建作者时,这种语法有很大的优势

Author author = new Author("name");
author.books.add(new Book("title1"), new Book("title2"), new Book("title3"));
author.insert();

它插入作者和与作者关联的书籍(但如果您删除作者,它不会删除书籍,因为 siena 不管理此类级联并让您这样做)。

您可以在此处阅读文档并在 siena google group 上提问,如果可以,我们会为您提供帮助。

于 2011-11-27T22:22:10.330 回答