假设我有两个域模型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>();
}因此,在我的代码中,我可以这样做:
book1 =新书(),boo2 =新书();
Author =新作者();author.books.add(book1);author.books.add(book2);author.insert();
但从文档Siena来看,这似乎并不正确
问题是什么是正确的解决方案?
发布于 2011-11-28 06:22:10
请记住,锡耶纳是基于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();当您使用book创建author时,这种语法有一个很大的优势
Author author = new Author("name");
author.books.add(new Book("title1"), new Book("title2"), new Book("title3"));
author.insert();它插入作者和与该作者相关联的书籍(但如果删除作者,它不会删除书籍,因为siena不会管理这种级联,而是让您这样做)。
你可以在这里阅读之前的文档,并在锡耶纳谷歌小组上提出问题,我们将尽我们所能帮助你。
https://stackoverflow.com/questions/8275788
复制相似问题