多對多關係中,中間表t_user_role不能添加額外的內容,如;創建時間,修改時間,操作員工員等等
我們可以通過另一種方式,多對一來解決.
首先來看一個類圖,
圖1:用戶與角色關係
從圖1中,我們發現:
CRUD:User類與UserRole類是 一對多關係,
Role類與UserRole也是一對多關係
通過UserRole類,我們可得到User類與Role類是多對多關係
UserRole
package com.demo.model; import java.util.Set; /**用戶角色關係 * @author wobendiankun *2014-11-6 下午10:33:34 */ public class UserRole { private int userRoleId; private String operator; private User user; private Role role; public UserRole() { } public UserRole(String operator) { this.operator = operator; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Role getRole() { return role; } public void setRole(Role role) { this.role = role; } public String getOperator() { return operator; } public void setOperator(String operator) { this.operator = operator; } public int getUserRoleId() { return userRoleId; } public void setUserRoleId(int userRoleId) { this.userRoleId = userRoleId; } }
配置<?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="com.demo.model.UserRole" table="t_user_role"> <id name="userRoleId" column="user_role_id"> <generator class="sequence"> <param name="sequence">SQE_T_USER_ROLE</param> </generator> </id> <property name="operator"/> <many-to-one name="user" column="user_id"></many-to-one> <many-to-one name="role" column="role_id"></many-to-one> </class> </hibernate-mapping>
add:package com.demo.model; import org.hibernate.Session; import org.junit.Test; import com.demo.util.HibernateUtil; /**多對多變形 * @author wobendiankun *2014-11-6 下午10:42:34 */ public class Many2ManyTransTest { @Test public void addTest(){ UserRole userRole1=new UserRole("aa"); userRole1.setUser(new User(61)); userRole1.setRole(new Role(3)); UserRole userRole2=new UserRole("bb"); userRole2.setUser(new User(65)); userRole2.setRole(new Role(3)); Session session = null; try { session = HibernateUtil.openSession(); session.beginTransaction(); session.save(userRole1); session.save(userRole2); session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); e.printStackTrace(); } finally { HibernateUtil.closeSession(session); } } }
發出sql:Hibernate: insert into t_user_role (operator, user_id, role_id, user_role_id) values (?, ?, ?, ?) Hibernate: insert into t_user_role (operator, user_id, role_id, user_role_id) values (?, ?, ?, ?)