Hibernate Set操作

场景:
Station Entity(dynamicUpdate = true, dynamicInsert = true)
Station 与 Genre为多对多的关系,且关系的维护在Station方
Station(id=3)的Genres(items=1701,1901,1903)

代码:

        Genre g1 = genreDao.load(Long.valueOf(1701));
        Genre g2 = genreDao.load(Long.valueOf(1901));
        Genre g3 = genreDao.load(Long.valueOf(1903));
        Set<Genre> genreSet = new HashSet();
        set.add(g1);
        set.add(g2);
        set.add(g3);
        Set<Genre> genreSetOther = new HashSet();
        genreSetOther.add(g1);
        genreSetOther.add(g2);

        Station s = load(Long.valueOf(3));
        //情景1
        s.getGenres().add(g1);
        s.getGenres().add(g2);
        s.getGenres().add(g3);
        //情景2
        s.setGenres(genreSet);

        //情景3
        s.getGenres().add(g1);
        s.getGenres().add(g2);
        s.getGenres().remove(g3);
        //情景4
        s.setGenres(genreSetOther);
        //更新
        saveOrUpdate(s);
      





情景1:
     因为set不能重复,且Station为动态更新,所以只会出一条查询s@Station的Genres集合的SQL

情景2:
     因为Genres集合为延迟加载,所以不会产生查询s@Station的Genres集合的SQL
但会多出两条SQL(先删除s@Station的Genres集合,再做inset)

情景3:
     比情景1多出一条删除中间表的记录
情景4:
     同情景2一样

你可能感兴趣的:(sql,Hibernate)