举例详解:Hibernate单向多对多单向关系(有关联表)以及多对一单向关系(无关联表)

这里有两个实体类Conference(会议)和User(用户)

package com.koala.model;

import java.sql.Date;
import java.util.Set;

public class Conference {
	private int conferenceId;
	private String theme;
	private Date startTime;
	private Date stopTime;
	private User applicant;
	private Set<User> optionalMan;
	private Set<User> requiredMan;
	
	public int getConferenceId() {
		return conferenceId;
	}
	public void setConferenceId(int conferenceId) {
		this.conferenceId = conferenceId;
	}
	public String getTheme() {
		return theme;
	}
	public void setTheme(String theme) {
		this.theme = theme;
	}
	public Date getStartTime() {
		return startTime;
	}
	public void setStartTime(Date startTime) {
		this.startTime = startTime;
	}
	public Date getStopTime() {
		return stopTime;
	}
	public void setStopTime(Date stopTime) {
		this.stopTime = stopTime;
	}
	public User getApplicant() {
		return applicant;
	}
	public void setApplicant(User applicant) {
		this.applicant = applicant;
	}
	public Set<User> getOptionalMan() {
		return optionalMan;
	}
	public void setOptionalMan(Set<User> optionalMan) {
		this.optionalMan = optionalMan;
	}
	public Set<User> getRequiredMan() {
		return requiredMan;
	}
	public void setRequiredMan(Set<User> requiredMan) {
		this.requiredMan = requiredMan;
	}
}

package com.koala.model;

public class User {
	private int userId;
	private String userName;
	private String userPassword;
	private int roleId;
	private int isDeleted;
	
	public int getIsDeleted() {
		return isDeleted;
	}
	public void setIsDeleted(int isDeleted) {
		this.isDeleted = isDeleted;
	}
	public int getRoleId() {
		return roleId;
	}
	public void setRoleId(int roleId) {
		this.roleId = roleId;
	}
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
}

另外有四张表

1、conference(会议表)

字段

类型

说明

conferenceid

int

主键,自增1

theme

varchar(80)

not null

applicantid

int

发起人

starttime

Date

开始时间

stoptime

Date

结束时间

2、

user(用户表)

字段

类型

说明

userid

int

主键、自增1

username

varchar(30)

用户名

userpassword

varchar(30)

密码

userid

int

用户的角色

isdeleted

int

是否删除

3、conference_optionalman (可选人员表)

字段

类型

说明

id

int

主键,自增1

conferenceid

int

userid

int

4、

conference_optionalman(必选人员表)

字段

类型

说明

id

int

主键,自增1

conferenceid

int

userid

int


所以这里的Hibernate映射文件应为:

<?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.koala.model.Conference" table="conference">
		
		<id name="conferenceId" column="conferenceid" type="int">
			<generator class="increment"> <!-- 主键id的生成方式为自增 -->
			</generator>
		</id>
		
		<property name="theme" column="theme" type="string" not-null="true"></property>
		<property name="startTime" column="starttime" type="string"></property>
		<property name="stopTime" column="stoptime" type="int"></property>
		
		<many-to-one name="applicant" column="applicantid"/>
		
		<set name="optionalMan" table="conference_optionalman">
	            <key column="conferenceid"/>
	            <many-to-many column="userid" class="com.koala.model.User"/>
    		</set>
    	
		<set name="requiredMan" table="conference_requiredman">
	            <key column="conferenceid"/>
	            <many-to-many column="userid" class="com.koala.model.User"/>
    		</set>
	</class>

</hibernate-mapping>

这里的Conference与User对应的关系有:

体现在Conference.java中的applicant属性:Conference与User的多对一单向关系

体现在Conference.java中的optionalMan属性:conference与User的多对多单向关系

体现在Conference.java中的requiredMan属性:conference与User的多对多单向关系

说明:

<many-to-one name="applicant" column="applicantid"/>
这里的column属性值为conference表里的属性
<set name="optionalMan" table="conference_optionalman">
	            <key column="conferenceid"/>
	            <many-to-many column="userid" class="com.koala.model.User"/>
    		</set>
这里的table值为Conference与User的一张关联表,key标签里的column属性值为Conference对象在关联表里的字段,many-to-many标签里的column属性值为User(由上面的class属性值指定)对象在关联表里的字段。

这里的column属性值为conference表里的属性

总结到此,有什么不对之处,请读者之处,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值