1. 程式人生 > >Jpa中註解一些引數含義

Jpa中註解一些引數含義

Cascade

在使用@OneToMany時,建立了一個user(1)對message(n)的關係,事先已經插入了一個user,當想為這個user(id為1)插入一條訊息時程式碼如下

 Message message = new Message("abc",new Date(),new Date(),1.2,1.2,1,1);
        User user = new User();
        user.setId(1L);
        message.setUser(user);
        msgRepo.save(message);

執行時報錯:

...detached entity passed to persist:(your Entity)

大概問題就是說user未能進行持久化(persist),仔細一想,這是兩個級聯實體,是不是級聯設定出了問題,原來,我直接使用了CascadeType.ALL,這種做法實在不是個好習慣,因為裡面有一個CascadeType.PERSIST是級聯實體同時實體化,而我們資料庫中已經有一個id=1user,這裡又出現一個,主鍵重複,導致持久化出錯,而且這也不是我們的意圖,我們是隻想持久化Message,所以Cascade中應該去除CascadeType.PERSIST
更詳細CascadeType

看這裡

mappedBy

mappedBy指向是不負責維護關係的實體,例如usermessage是一對多的關係,message負責維護關係,則應該在user中指出mappedBy = "user"值為表名。

當然並不一定要用mappedBy,加入mappedBy可以避免多生成一張中間表

舉例解釋:點這裡

FetchType

直接點這裡好了


我不怎麼生產博文,經常做博文的搬運工。