spring-data-jpa多對多映射


僅做筆記用

第一次寫多對多:

需求:相冊(Album)分類(Fenlei)  一個相冊有多個分類,一個分類有多個相冊

主要代碼:

@Entity
@Table(name = "album")
public class Album {/*相冊類*/
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToMany
    @JoinTable(name = "album_fenlei",
            joinColumns = @JoinColumn(name = "album_id"),
            inverseJoinColumns = @JoinColumn(name = "fenlei_id"))
    private List<Fenlei> fenleis;/*多對多 分類*/

  

@Entity
@Table(name = "fenlei")
public class Fenlei {//分類類
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToMany(mappedBy = "fenleis")
    private List<Album> albums;/*多對多  相冊*/  

編寫測試類

 

dao層為:public interface AlbumDao extends JpaRepository<Album,Long> 
     Fenlei fenlei = new Fenlei(1,"fenlei",null);
        Fenlei fenlei2 = new Fenlei(2,"fenlei2",null);
        List<Fenlei> fenleis = new ArrayList<>();
        fenleis.add(fenlei);
        fenleis.add(fenlei2);
        Album album = new Album(1,fenleis);
        albumDao.save(album);
//如果只執行上面這些;數據庫中的fenlei表數據為空,album表有一條數據,album_fenlei有兩條數據
//如果加上下面這些;數據庫中的fenlei表 有兩條數據 fenleiDao.save(fenlei); fenleiDao.save(fenlei2);

  

插入數據后 一個相冊id為2,兩個分類    只看中間表id為1和2

 

 

但是

        Fenlei fenlei=new Fenlei(1,null);
        List<Album> albums = new ArrayList<>();
        Album album = new Album(1,null);
        Album album1 = new Album(2,null);
        albums.add(album);
        albums.add(album1);
        fenlei.setAlbums(albums);
        fenleiDao.save(fenlei);  
//執行之后三張表都為空

 

下面給與解釋,參照https://www.cnblogs.com/jpfss/p/10893800.html

 

其中最主要的就是多對多關聯映射上面的注解

1、多對多關系中一般不設置級聯保存、級聯刪除、級聯更新等操作。(沒有設置)

2、可以隨意指定一方為關系維護端,在這個例子中,我指定 Album為關系維護端,所以生成的關聯表名稱為: album_fenlei,關聯表的字段為:album_id 和 fenlei_id。

3、多對多關系的綁定由關系維護端來完成,即由 Album.setFenleis(fenleis) 來綁定多對多的關系(生成中間表)。關系被維護端不能綁定關系(也就是不能生成中間表),即fenlei不能綁定關系。

4、多對多關系的解除由關系維護端來完成,即由Album.getFenleis().remove(fenlei)來解除多對多的關系。關系被維護端不能解除關系(刪除fenlei,不能刪除中間表信息),即Fellei不能解除關系。

5、如果 Album 和 Fenlei 已經綁定了多對多的關系,那么不能(我測試了可以直接刪除,但中間表不變)直接刪除 Fenlei,需要由 Album 解除關系后,才能刪除 Fenlei。但是可以直接刪除 Album,因為 Album 是關系維護端,刪除 Album 時,會先解除(刪除中間表) Album 和 Fenlei 的關系,再刪除 Fenlei。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM