当我试图从“book”中搜索“nice_library”时,它运行得非常好。我猜是因为nice_library FK保存在书中。
book = bookRepository.findById(book.getId()).orElseThrow(() -> new RuntimeException());
Long id = book.getNiceLibrary().getId();
assertEquals(id, niceLibrary.getId());
但是当我试图从“nice_library”中搜索“book”时却什么都找不到。我猜是因为nice_library没有book的FK
niceLibrary = niceLibraryRepository.findById(niceLibrary.getId()).orElseThrow(() -> new RuntimeException());
List<Book> books = niceLibrary.getBooks(); // WHAT THE
我希望将“Book.id“保存在“nice_library”表中,以便从“nice_library”搜索到“book”。
Book.java
package com.example.jpa;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
@Getter
@Entity
public class Book {
@Id
@GeneratedValue
@Column
private Long id;
@Setter
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "LIBRARY_ID") // Foreign Key
private NiceLibrary niceLibrary;
}
NiceLibrary.java
package com.example.jpa;
import lombok.Getter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Getter
@Entity
public class NiceLibrary {
@Id
@GeneratedValue
@Column
private Long id;
@OneToMany(mappedBy = "niceLibrary")
private List<Book> books = new ArrayList<>();
}
一种图书桌
id|library_id|
--+----------+
77| 78|
nice_库
id|
--+
78|
测试代码
@SpringBootTest
class BookServiceTest {
@Autowired
private BookRepository bookRepository;
@Autowired
private NiceLibraryRepository niceLibraryRepository;
@Test
public void book() {
Book book = new Book();
NiceLibrary niceLibrary = new NiceLibrary();
niceLibrary.getBooks().add(book);
book.setNiceLibrary(niceLibrary);
bookRepository.save(book);
book = bookRepository.findById(book.getId()).orElseThrow(() -> new RuntimeException());
Long id = book.getNiceLibrary().getId();
assertEquals(id, niceLibrary.getId());
niceLibrary = niceLibraryRepository.findById(niceLibrary.getId()).orElseThrow(() -> new RuntimeException());
List<Book> books = niceLibrary.getBooks(); // ???
}
如何从nice_library搜索图书?
1条答案
按热度按时间kkbh8khc1#
据我所知,你想从图书馆得到一本特定的书。
一对多关系是通过在book表中引用库来设置的。
没有理由将图书的id存储在library表中。
这就是设置一对多关系所需的全部内容,并且您已正确完成。
你描述这个问题的方式是,你期望一个图书馆只有一本书,大约和我的图书馆一样大。
在一对多关系中,一方(在本例中为library)将始终具有实体集合,而另一方(在本例中为book)将仅具有对单个实体的引用。