第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用數(shù)據(jù)庫 jpa 中現(xiàn)有和不存在的數(shù)據(jù)保存新數(shù)據(jù)時出錯

使用數(shù)據(jù)庫 jpa 中現(xiàn)有和不存在的數(shù)據(jù)保存新數(shù)據(jù)時出錯

函數(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)建并在您的書中引用的)。我沒有測試這個解決方案,如果它不起作用,請在評論中告訴我。


查看完整回答
反對 回復(fù) 2023-03-02
  • 1 回答
  • 0 關(guān)注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號