gpt4 book ai didi

java - 如何在Siena和GAE中定义一对多关系?

转载 作者:行者123 更新时间:2023-11-30 04:56:49 28 4
gpt4 key购买 nike

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

从锡耶纳的文档中,似乎暗示了类似的内容:

public class Author extends Model {

@Id
public Long id;

public String name;


public Book book;
}

但我期待的是这样的事情:

公共(public)类作者扩展模型{

    @Id
public Long id;

public String name;

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

所以在我的代码中我可以做类似的事情:

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

作者作者 = new Author();作者.books.add(book1);作者.books.add(book2);作者.insert();

但是从文档 Siena 来看这似乎不正确

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

最佳答案

请记住,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 时,会出现一种新的直观语法,其中使用 Many 记录: 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 上提问,我们会尽可能为您提供帮助。

关于java - 如何在Siena和GAE中定义一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275788/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com