hibernate之12.many2many變形

多對多關係中,中間表t_user_role不能添加額外的內容,如;創建時間,修改時間,操作員工員等等

我們可以通過另一種方式,多對一來解決.

首先來看一個類圖,



圖1:用戶與角色關係



從圖1中,我們發現: 

User類與UserRole類是 一對多關係,

Role類與UserRole也是一對多關係

通過UserRole類,我們可得到User類與Role類是多對多關係

CRUD:

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 (?, ?, ?, ?)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章