我有兩個物體 Book 和 BookTag。它們通過多對多的關系連接。
@Getter
@Setter
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder(toBuilder = true)
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idbooks", insertable = false, updatable = false)
private Long id;
// other columns
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "books_tags",
joinColumns = {@JoinColumn(name = "book_id")},
inverseJoinColumns = {@JoinColumn(name = "book_tag_id")}
)
Set<BookTag> tags = new HashSet<>();
// getters and setters
}
@Getter
@Setter
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder(toBuilder = true)
@Table(name = "book_tag")
public class BookTag {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", insertable = false, updatable = false)
private Long id;
// other columns
@ManyToMany(mappedBy = "tags")
private Set<Book> books = new HashSet<>();
// getters and setters
}
我嘗試使用這種服務方法將新的 BookTag 物體添加到 bookTags 集合中
public void updateBook(Book book, String tag) {
if (tag != null && !tag.equals("")) {
BookTag bookTag = bookTagService.findBookTagByTagName(tag).orElse(new BookTag(tag));
Set<BookTag> allTags = book.getTags();
allTags.add(bookTag);
book.setTags(allTags);
}
bookRepository.save(book);
}
但它不起作用,在我將物體保存到 mysql 資料庫后,它可以 在向書插入新標簽后正常查看 books_tags 表
在我嘗試使用上述方法向書添加新標簽后,在向書添加新標簽后,我得到 了 books_tags 表的此類結果視圖
如您所見,我的方法沒有添加新物體,它更改了新 bookTag ID 的現有條目。請幫我解決這個問題。
uj5u.com熱心網友回復:
這一行實際上可以回傳一個未保存的 Book 標簽: BookTag bookTag = bookTagService.findBookTagByTagName(tag).orElse(new BookTag(tag));
所以在將它添加到完整的書之前呼叫 bookTag 上的保存。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/470361.html