函數(shù)式編程
2023-03-02 16:04:13
我有Book桌子和Author桌子。他們的關(guān)系是many-to-many。我的目標(biāo)我希望能夠堅持新書。如果書籍的作者已經(jīng)存在于Author表中,我不想在Author表中保留相同的作者。如果作者在表中不存在Author,則作者數(shù)據(jù)將保留在Author表中。以下是我聲明實體和 serviceImplementation 以保存數(shù)據(jù)的方式:書@Entity(name = "book")public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "title", nullable = false) private String title; @Column(name = "year", nullable = false) private String year; @ManyToMany(cascade = CascadeType.ALL) @JoinTable( name = "book_author", joinColumns = @JoinColumn(name = "book_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "author_id", referencedColumnName = "id")) @JsonManagedReference private Set<Author> author; @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "category_id", referencedColumnName = "id", nullable = false) @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) private BookCategory category;}作者@Entity(name = "author")public class Author { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name", nullable = false) private String name; @Column(name = "address", nullable = false) private String address; @ManyToMany(mappedBy = "author", cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JsonBackReference private Set<Book> book;}如果所有作者都存在于Author表中或表中根本不存在,則上面的代碼是有效的Author。如果其中一個存在而另一個不存在,它將根據(jù)CascadeType我在定義實體時使用的錯誤拋出錯誤。
1 回答

慕尼黑的夜晚無繁華
TA貢獻(xiàn)1864條經(jīng)驗 獲得超6個贊
我會這樣嘗試:
for (AuthorDto authorDto : dataAuthorDto) {
Author author = authorDao.findByName(authorDto.getName());
if (null == author) {
author = new Author();
BeanUtils.copyProperties(authorDto, author);
}
dataAuthor.add(author);
}
這樣,如果您在數(shù)據(jù)庫中找到一位作者,您可以在您的書中引用現(xiàn)有作者,而不是創(chuàng)建一個新作者。這樣您就不會在持久性上下文中得到兩個相同的作者(一個是您使用 findByName 找到的,另一個是您創(chuàng)建并在您的書中引用的)。我沒有測試這個解決方案,如果它不起作用,請在評論中告訴我。
添加回答
舉報
0/150
提交
取消