lfendo 通过本文主要向大家介绍了hibernate注解详解,hibernate详解,hibernate框架详解,hibernate配置详解,hibernate原理详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
双向多对多关联映射原理:
假设,一个员工可能有多个角色,一个角色可能有多个员工,从员工或角色的角度看,这就是多对多的关系,不管从哪一个角度看,都是多对多的联系。多对多关联映射关系一般采用中间表的形式来实现,即新增一种包含关联双方主键的表。实现多对多关联关系,在数据库底层通过添加中间表指定关联关系,而在hibernate框架在双方的实体中添加一个保存对方的集合,在双方的映射文件中使用<set>元素和<many-to-many>元素进行关联关系的配置。
如下图所示:
(1)XML版
Role类:
package Hibernate_demo1.Demo15.Entity; import java.util.Set; public class Role { private String id; private String rame; private Set<User> users; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getRame() { return rame; } public void setRame(String rame) { this.rame = rame; } public Set<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; } }</div>
User类:
package Hibernate_demo1.Demo15.Entity; import java.util.Set; public class User { private String id; private String uname; private Set<Role> roles; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; } }</div>
Role.hbm.xml映射类:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Hibernate_demo1.Demo15.Entity.Role" table="role"> <id name="id" type="java.lang.String"> <column name="id"/> <generator class="uuid"> </generator> </id> <property name="rame" column="rname"/> <set name="users" table="user_role"> <key column="roleid"></key> <many-to-many class="Hibernate_demo1.Demo15.Entity.User" column="userid"></many-to-many> </set> </class> </hibernate-mapping></div>
User.hbm.xml映射类:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Hibernate_demo1.Demo15.Entity.User" table="user"> <id name="id"> <generator class="uuid"> </generator> </id> <property name="uname" column="uname"/> <set name="roles" table="user_role"> <key column="userid"/> <many-to-many class="Hibernate_demo1.Demo15.Entity.Role" column="roleid" /> </set> </class> </hibernate-mapping></div>
测试类:
package Hibernate_demo1.Demo15; import java.util.HashSet; import java.util.Set; import org.hibernate.Session; import Hibernate_demo1.Demo15.Entity.Role; import Hibernate_demo1.Demo15.Entity.User; import Hibernate_demo1.Demo15.Util.HibernateUtils; public class App { public static void main( String[] args ) { Session session = null; try{ session = HibernateUtils.getSession(); session.beginTransaction(); Role r1 = new Role(); r1.setRame("数据录入人员"); session.save(r1); Role r2 = new Role(); r2.setRame("商务主管"); session.save(r2); Role r3 = new Role(); r3.setRame("商务经理"); session.save(r3); Role r4 = new Role(); r4.setRame("项目会计"); session.save(r4); User u1 = new User(); u1.setUname("张三"); Set<Role> u1Roles = new HashSet<Role>(); u1Roles.add(r1); u1Roles.add(r2); u1.setRoles(u1Roles); session.save(u1); User u2 = new User(); u2.setUname("李四"); Set<Role> u2Roles = new HashSet<Role>(); u2Roles.add(r1); u2Roles.add(r2); u2Roles.add(r3); u2.setRoles(u2Roles); session.save(u2); User u3 = new User(); u3.setUname("王五"); Set<Role> u3Roles = new HashSet<Role>(); u3Roles.add(r3); u3Roles.add(r4); u3.setRoles(u3Roles); session.save(u3); session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils.closeSession(session); } } }</div>
执行结果:
Hibernate: insert into role (rname, id) values (?, ?) Hibernate: insert into role (rname, id) values (?, ?) Hibernate: insert into role (rname, id) values (?, ?) Hibernate: insert into role (rname, id) values (?, ?) Hibernate: insert into user (uname, id) values (?, ?) Hibernate: insert into user (uname, id) values (?, ?) Hibernate: insert into user (uname, id) values (?, ?) Hibernate: insert into user_role (userid, roleid) values (?, ?) Hibernate: insert into user_role (userid, roleid) values (?, ?) Hibernate: insert into user_role (userid, roleid) values (?, ?) Hibernate: insert into user_role (userid, roleid) values (?, ?) Hibernate: insert into user_role (userid, roleid) values (?, ?) Hibernate: insert into user_role (userid, roleid) values (?, ?) Hibernate: insert into user_role (userid, roleid) values (?, ?)</div>
数据库内容为:
user表:
role表:
user_role表:
(2)注解版
Role类:
package Hibernate_demo1.Demo16.Entity; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedVa