Hibernate中表与表的多对多关系

本文介绍了一种常见的数据库表关系——多对多关系,并详细解释了如何使用Hibernate框架进行多对多关系的建模与操作。具体包括实体类的设计、映射文件的配置以及增删改查等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表的多对多关系及操作

多对多的表关系表达




创建表:
          用户表
              


         角色表
                      
                   

          关系表
                       
                       




创建实体类:
             用户实体类

package com.entity;
import java.util.HashSet;
import java.util.Set;


public class Users {


/*
* 多对多关系实体类
*/
private int uids;
private String unames;
private Set<Role> role=new HashSet<Role>();


public Users() {
super();
}
public Users(String unames) {
super();
this.unames = unames;
}
public int getUids() {
return uids;
}
public void setUids(int uids) {
this.uids = uids;
}
public String getUnames() {
return unames;
}
public void setUnames(String unames) {
this.unames = unames;
}
public Set<Role> getRole() {
return role;
}
public void setRole(Set<Role> role) {
this.role = role;
}


}     


             角色实体类:

package com.entity;


import java.util.HashSet;
import java.util.Set;


public class Role {
/*
* 多对多关系实体类
*/

private int rid;
private String rname;
private Set<Users> users=new HashSet<Users>();


public Role() {
super();
}
public Role(String rname) {
super();
this.rname = rname;
}
public int getRid() {
return rid;
}
public void setRid(int rid) {
this.rid = rid;
}
public String getRname() {
return rname;
}
public void setRname(String rname) {
this.rname = rname;
}
public Set<Users> getUsers() {
return users;
}
public void setUsers(Set<Users> users) {
this.users = users;
}

}


   这里我们不需要创建关系表的实体类,通过hibernate来创建关系就可以了

映射文件
    用户映射
  <set name="role" table="users_role" cascade="save-update"> //able="users_role"关系表
          <key column="uids"></key>
          <many-to-many class="com.entity.Role" column="rid"></many-to-many>
        </set>

   角色映射
  <set name="users" table="users_rid">
           <key column="rid"></key>
           <many-to-many class="com.entity.Users" column="uids"></many-to-many>
         
         </set>

    
 
配置文件
   <!-- 配置多对多的映射文件 -->
        <mapping resource="com/entity/Users.hbm.xml"></mapping>
        <mapping resource="com/entity/Role.hbm.xml"></mapping>


操作:

package com.zking.test;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


import com.zking.entity.Card;
import com.zking.entity.City;
import com.zking.entity.Province;
import com.zking.entity.Roles;
import com.zking.entity.User;
import com.zking.entity.Users;


public class TestManyToMany {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;


@Before
public void before(){
Configuration configuration=new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
}
@After
public void after(){
transaction.commit();
session.close();
sessionFactory.close();
}

@Test
public void testAdd(){
Users users1=new Users("辉辉");
Users users2=new Users("静静");

Roles roles1=new Roles("老公");
Roles roles2=new Roles("老婆");
Roles roles3=new Roles("儿子");
Roles roles4=new Roles("孙子");

users1.getRoles().add(roles1);
users1.getRoles().add(roles3);
users1.getRoles().add(roles4);
users2.getRoles().add(roles2);
users2.getRoles().add(roles4);

session.save(users1);
session.save(users2);

}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值