ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 多对多配置 有User和Role持久化类. ## XML配置 user: ~~~ <!--配置多对多--> <!--name:自己里面对方的集合名.table:中间表的表名--> <set name="roles" table="user_role"> <!--自己在中间表外键字段名--> <key column="user_id"></key> <!--name:对方方全限定名. column:对方在中间表的外键字段名--> <many-to-many class="com.like.bean.Role" column="role_id"></many-to-many> </set> ~~~ role: ~~~ <set name="users" table="user_role"> <key column="role_id"></key> <many-to-many class="com.like.bean.User" column="user_id"></many-to-many> </set> ~~~ ## 代码 按照以下保存数据是会报错的. 因为两个持久化类都去维护了相同的字段了.这样在中间表会产生重复的记录.只有能有一方放弃对外键的维护.一般是被动的一方去放弃维护. 用户和角色相比,角色是被动的一方. ~~~ //两个用户 User user1 = new User(); user1.setName("jack"); User user2 = new User(); user2.setName("rose"); //三个角色 Role role1 = new Role(); role1.setRole_name("管理员"); Role role2 = new Role(); role2.setRole_name("仓管"); Role role3 = new Role(); role3.setRole_name("快递员"); //用户1关联角色 user1.getRoles().add(role1); user1.getRoles().add(role2); //用户2关联角色 user2.getRoles().add(role1); user2.getRoles().add(role3); //角色关联用户 role1.getUsers().add(user1); role1.getUsers().add(user2); role2.getUsers().add(user1); role3.getUsers().add(user1); role3.getUsers().add(user2); //保存用户 session.save(user1); session.save(user2); //保存角色 session.save(role1); session.save(role2); session.save(role3); ~~~ 结果: ``` 报错 ``` 被动一方放弃外键的维护: ~~~ <set name="users" table="user_role" inverse="true"> <key column="role_id"></key> <many-to-many class="com.like.bean.User" column="user_id"></many-to-many> </set> ~~~