Hibernate 多对多映射实列
生活随笔
收集整理的這篇文章主要介紹了
Hibernate 多对多映射实列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Hibernate 3.0.5
1、Usergroup.hbm.xml 用戶組表
???? ??? <set name="users" table="Groupandusers" lazy="true" inverse="false" cascade="save-update" sort="unsorted">
??? ??? ??? <key column="GROUPID"/>
??? ??? ??? <many-to-many class="cn.com.commnet.model.systems.Users" column="USERID" outer-join="auto"/>
??????? </set>
2、Users.hbm.xml 用戶表
??? ??? <set name="groups" table="Groupandusers" lazy="true" inverse="false" cascade="save-update" sort="unsorted" >
??? ??? ??? <key column="USERID"/>
??? ??? ??? <many-to-many class="cn.com.commnet.model.systems.Usergroup" column="GROUPID" outer-join="auto"/>
??????? </set>
3、Model? Usergroup.java
private Set users = new HashSet();
public Set getUsers() {
??? ??? return users;
??? }
??? public void setUsers(Set users) {
??? ??? this.users = users;
??? }
???
??? public void addUser(RgUsers user) {
??? ??? users.add(user);
??? }
???
??? public void updateUsers(Set newUserset){
??? ??? //get intersection elements 取交集
??? ??? this.getUsers().retainAll(newUserset);
??? ??? //get the refresh set in new set 新的集合中取補集
??? ??? newUserset.removeAll( this.getUsers());
??? ??? //get the refreshed data 最終的集合
??? ??? this.getUsers().addAll(newUserset);
??? }
4、Model??? Users.java
private Set groups = new HashSet();
??? public Set getGroups() {
??? ??? return groups;
??? }
??? public void setGroups(Set groups) {
??? ??? this.groups = groups;
??? }
???
??? public void addGroup(RgUsergroup group) {
??? ??? groups.add(group);
??? }
???
??? public void updateGroups(Set newGroupset){
??? ??? //get intersection elements 取交集
??? ??? this.getGroups().retainAll(newGroupset);
??? ??? //get the refresh set in new set 新的集合中取補集
??? ??? newGroupset.removeAll( this.getGroups());
??? ??? //get the refreshed data 最終的集合
??? ??? this.getGroups().addAll(newGroupset);
??? //父接點一側的配置應為 cascade="all-delete-orphan" ,
??? //否則子接點只能修改和新增,集合中刪除掉的子接點,在數據庫中并沒有被刪除掉。
??? }
5、Service 層? UserManager.java
??? ??? ??? a). add 方法:
??? ??? ??? String[] groupList = form.getGroupList();
??? ??? ???? for(int i=0;i<groupList.length;i++) {
??? ??? ???? ??? RgUsergroup group = new UserGroupDAO().getGroupById(Long.valueOf(groupList[i]),false);
??? ??? ???? ??? user.addGroup(group);
??? ??? ???? }
??? ??? ??? dao.save(user);
??? ?? ??? b). update 方法:
??? ??? ??? Set newGroupset = new HashSet();
??? ??? ???? String[] groupList = form.getGroupList();
??? ??? ???? for(int i=0;i<groupList.length;i++) {
??? ??? ???? ??? RgUsergroup group = new UserGroupDAO().getGroupById(Long.valueOf(groupList[i]),false);
??? ??? ???? ??? newGroupset.add(group);
??? ??? ???? }
??? ??? ???? user.updateGroups(newGroupset);?? //更新多對多對應表
??? ??? ??? dao.update(user);
??? 另外, 多對多, 及一對多的關聯查詢時, 通過外鍵屬性的條件進行查詢, 如:
??? String strSql = "from Users t where t.groups.groupid =?"
1、Usergroup.hbm.xml 用戶組表
???? ??? <set name="users" table="Groupandusers" lazy="true" inverse="false" cascade="save-update" sort="unsorted">
??? ??? ??? <key column="GROUPID"/>
??? ??? ??? <many-to-many class="cn.com.commnet.model.systems.Users" column="USERID" outer-join="auto"/>
??????? </set>
2、Users.hbm.xml 用戶表
??? ??? <set name="groups" table="Groupandusers" lazy="true" inverse="false" cascade="save-update" sort="unsorted" >
??? ??? ??? <key column="USERID"/>
??? ??? ??? <many-to-many class="cn.com.commnet.model.systems.Usergroup" column="GROUPID" outer-join="auto"/>
??????? </set>
3、Model? Usergroup.java
private Set users = new HashSet();
public Set getUsers() {
??? ??? return users;
??? }
??? public void setUsers(Set users) {
??? ??? this.users = users;
??? }
???
??? public void addUser(RgUsers user) {
??? ??? users.add(user);
??? }
???
??? public void updateUsers(Set newUserset){
??? ??? //get intersection elements 取交集
??? ??? this.getUsers().retainAll(newUserset);
??? ??? //get the refresh set in new set 新的集合中取補集
??? ??? newUserset.removeAll( this.getUsers());
??? ??? //get the refreshed data 最終的集合
??? ??? this.getUsers().addAll(newUserset);
??? }
4、Model??? Users.java
private Set groups = new HashSet();
??? public Set getGroups() {
??? ??? return groups;
??? }
??? public void setGroups(Set groups) {
??? ??? this.groups = groups;
??? }
???
??? public void addGroup(RgUsergroup group) {
??? ??? groups.add(group);
??? }
???
??? public void updateGroups(Set newGroupset){
??? ??? //get intersection elements 取交集
??? ??? this.getGroups().retainAll(newGroupset);
??? ??? //get the refresh set in new set 新的集合中取補集
??? ??? newGroupset.removeAll( this.getGroups());
??? ??? //get the refreshed data 最終的集合
??? ??? this.getGroups().addAll(newGroupset);
??? //父接點一側的配置應為 cascade="all-delete-orphan" ,
??? //否則子接點只能修改和新增,集合中刪除掉的子接點,在數據庫中并沒有被刪除掉。
??? }
5、Service 層? UserManager.java
??? ??? ??? a). add 方法:
??? ??? ??? String[] groupList = form.getGroupList();
??? ??? ???? for(int i=0;i<groupList.length;i++) {
??? ??? ???? ??? RgUsergroup group = new UserGroupDAO().getGroupById(Long.valueOf(groupList[i]),false);
??? ??? ???? ??? user.addGroup(group);
??? ??? ???? }
??? ??? ??? dao.save(user);
??? ?? ??? b). update 方法:
??? ??? ??? Set newGroupset = new HashSet();
??? ??? ???? String[] groupList = form.getGroupList();
??? ??? ???? for(int i=0;i<groupList.length;i++) {
??? ??? ???? ??? RgUsergroup group = new UserGroupDAO().getGroupById(Long.valueOf(groupList[i]),false);
??? ??? ???? ??? newGroupset.add(group);
??? ??? ???? }
??? ??? ???? user.updateGroups(newGroupset);?? //更新多對多對應表
??? ??? ??? dao.update(user);
??? 另外, 多對多, 及一對多的關聯查詢時, 通過外鍵屬性的條件進行查詢, 如:
??? String strSql = "from Users t where t.groups.groupid =?"
轉載于:https://www.cnblogs.com/josson/archive/2005/08/19/218768.html
總結
以上是生活随笔為你收集整理的Hibernate 多对多映射实列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一次接触 SharpHsql(纯C#开
- 下一篇: C# Programming Langu