gpt4 book ai didi

java - 一对多和多对一

转载 作者:行者123 更新时间:2023-12-01 13:10:50 25 4
gpt4 key购买 nike

我遇到这种情况,我想知道是否可以使用JPA来实现,同时多对一一对多> 关系,
我有一个图书馆,其中包含书籍列表(一对多),因此我可以在书籍中插入书籍 图书馆
同时,我想更新一本,说它现在属于另一个图书馆,只是更新> 信息(因此它将其从中删除,并将其放入另一个库中)
使用 JPA 注释可以实现这一点吗?
提前致谢!

最佳答案

您可以使用mappedBy@OneToMany ,例如:

@Entity
class Book {

@ManyToOne
Library library

}

@Entity
class Library {

@OneToMany(mappedBy='library')
List<Book> books

}

要添加新对象,您可以使用以下内容:

Library library1 = new Library()
em.persist(library1)

Book book1 = new Book()
book1.library = library1
em.persist(book1)

Book book2 = new Book()
book2.library = library1
em.persist(book2)

对于@OneToMany侧面,您仍然可以检索 books来自library ,例如:

// in transaction
Library library = findLibraryById(1)
println library.books.size() // output: 2

然后您可以更改 library对于Book只需为 library 设置新值即可,例如:

// in transaction
Library library2 = new Library()
em.persist(library2)
Book book = c.findBookById()
book.library = library2

更新:如果你想持久化一个操作,可以使用 cascade在映射中(不真正推荐!),例如:

@ManyToOne(cascade=CascadeType.ALL)
Library library

现在在 Book 上运行将级联到Library ,例如,创建 Book还将创建其 Library :

Library libraryA = new Library()
Book book = new Book()
book.library = libraryA
em.persist(book)

请注意,JPA 不会维护 Library.books 的内存状态。为你。您应该添加 BookLibrary.books手动,或重新执行查询以获取 Library 的最新状态.

另一个缺点是Book必须知道哪个Library它属于。这不应该是 Book 的责任。这将使将来的维护变得更加困难。例如,如果您决定存储 BookBookRack而不是Library ,您需要更改 BookLibrary .

关于java - 一对多和多对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22883623/

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