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一样

没有更多推荐了,返回首页