hibernate一对一,一对多,多对一,多对多关联映射的具体范例

1.One to one(基于外键的1对1)(单向)

实体类

Book.java

	private int id;
	private String bookname;
	private User user;

User.java

	private Integer id;
	private String username;
    private String password;

配置文件

Book.hbm.xml

<class name="com.hxzy.hibernate.entity.Book" table="t_book1">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="bookname"></property>
		<many-to-one name="user" column="userid" unique="true" cascade="all"></many-to-one>
</class>

User.hbm.xml

<class name="com.hxzy.hibernate.entity.User" table="t_user1">
       	<id name="id">
       		<generator class="native"></generator>
       	</id>
       	<property name="username"></property>
       	<property name="password"></property>
</class>

数据表结构

Book表

字段名字段类型
idNumber(主键)
booknameVarchar2
userid(外键关联,唯一键)Number

User表

字段名字段类型
idNumber(主键)
usernameVarchar2
passwordVarchar2

2.One to one(基于主键的1对1)(单向)

实体类

Person.java

	private int id;
	private String username;
	private Address address;

Address.java

	private int id;
	private String addrName;

配置文件

Person.hbm.xml

<class name="com.hxzy.hibernate.entity.Person" table="t_person1">
		<id name="id" column="addrid">
			<generator class="foreign">
				<param name="property">address</param>
			</generator>
		</id>
		<property name="username"></property>
		<!-- constrained  使当前主键添加上外键约束 -->
		<one-to-one name="address" constrained="true"></one-to-one>
</class>

Address.hbm.xml

<class name="com.hxzy.hibernate.entity.Address" table="t_Address1">
       	<id name="id" column="addrid">
       		<generator class="native"></generator>
       	</id>
       	<property name="addrName"></property>
</class>

数据表结构

Tips:相当于直接把Address的id当成Person的id

Person表

字段名字段类型
addrid(外键关联)Number(主键)
usernameVarchar2

Address表

字段名字段类型
addridNumber(主键)
addrNameVarchar2

3.Many to one多对一(单向)

实体类

多本书对应一个用户

Book.java

	private int id;
	private String bookname;
	private User user;

User.java

	private Integer id;
	private String username;
	private String password;

配置文件

Book.hbm.xml

<class name="com.hxzy.hibernate.entity.Book" table="t_book1">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="bookname"></property>
		<many-to-one name="user" column="userid" cascade="all"></many-to-one>
</class>

User.hbm.xml

<class name="com.hxzy.hibernate.entity.User" table="t_user1">
       	<id name="id">
       		<generator class="native"></generator>
       	</id>
       	<property name="username"></property>
       	<property name="password"></property>
</class>

数据表结构

Book表

字段名字段类型
idNumber(主键)
booknameVarchar2
userid(外键关联)Number

User表

字段名字段类型
idNumber(主键)
usernameVarchar2
passwordVarchar2

4.One to many一对多(单向)

实体类

一个班级对应多个学生

Clazz.java

	private int id;
	private String clsName;
	private Set<Student> students = new HashSet<Student>();	

Student.java

	private int id;
	private String stuName;

配置文件

Clazz.hbm.xml

<class name="com.hxzy.hibernate.entity.Clazz" table="t_Clazz1">
		<id name="id" column="clsid">
			<generator class="native"></generator>
		</id>
		<property name="clsName"></property>
		<set name="students">
			<key column="clsid" not-null="true"></key>
			<one-to-many class="com.hxzy.hibernate.entity.Student"/>
		</set>
</class>

Student.hbm.xml

<class name="com.hxzy.hibernate.entity.Student" table="t_Student1">
		<id name="id" column="stuid">
			<generator class="native"></generator>
		</id>
		<property name="stuName"></property>
</class>

数据表结构

Clazz表

字段名字段类型
clsidNumber(主键)
clsNameVarchar2
passwordVarchar2

Student表

字段名字段类型
stuidNumber(主键)
stuNameVarchar2
clsid(外键)Number

5.Many to many多对多(单向)

实体类

多个课程对应多个学生

Course.java

	private int id;
	private String courseName;
	private Set<Student> students = new HashSet<Student>();	

Student.java

	private int id;
	private String stuName;

配置文件

Course.hbm.xml

<class name="com.hxzy.hibernate.entity.Course" table="t_Course1">
		<id name="id" column="courseid">
			<generator class="native"></generator>
		</id>
		<property name="courseName"></property>
		<set name="students" table="t_course_student">
			<key column="courseid"></key>
			<many-to-many column="stuid" class="com.hxzy.hibernate.entity.Student"></many-to-many>
		</set>
</class>

Student.hbm.xml

<class name="com.hxzy.hibernate.entity.Student" table="t_Student1">
		<id name="id" column="stuid">
			<generator class="native"></generator>
		</id>
		<property name="stuName"></property>
</class>

数据表结构

Course表

字段名字段类型
courseidNumber(主键)
courseNameVarchar2

Student表

字段名字段类型
stuidNumber(主键)
stuNameVarchar2

中间表

字段名字段类型
Courseid(关联)Number(主键)
Stuid(关联)Number(主键)

6.Many to many多对多(双向)

实体类

多个课程对应多个学生

Course.java

	private int id;
	private String courseName;
	private Set<Student> students = new HashSet<Student>();	

Student.java

	private int id;
	private String stuName;
	private Set<Course> courses = new HashSet<Course>();

配置文件

Course.hbm.xml

<class name="com.hxzy.hibernate.entity.Course" table="t_Course1">
		<id name="id" column="courseid">
			<generator class="native"></generator>
		</id>
		<property name="courseName"></property>
		<set name="students" table="t_course_student">
			<key column="courseid"></key>
			<many-to-many column="stuid" class="com.hxzy.hibernate.entity.Student"></many-to-many>
		</set>
</class>

Student.hbm.xml

<class name="com.hxzy.hibernate.entity.Student" table="t_Student1">
		<id name="id" column="stuid">
			<generator class="native"></generator>
		</id>
		<property name="stuName"></property>
<!-- 将一方的inverse属性设置为true,即将主外键的关系交由另一方来维护 -->
		<set name="courses" inverse="true" table="t_course_student">
			<key column="stuid"></key>
			<many-to-many column="courseid" 						class="com.hxzy.hibernate.entity.Course"></many-to-many>
		</set>
</class>

数据表结构

Course表

字段名字段类型
courseidNumber(主键)
courseNameVarchar2

Student表

字段名字段类型
stuidNumber(主键)
stuNameVarchar2

中间表

字段名字段类型
Courseid(关联)Number(主键)
Stuid(关联)Number(主键)

7.One to one(基于外键的1对1)(双向)

实体类

Book.java

	private int id;
	private String bookname;
	private User user;

User.java

	private Integer id;
	private String username;
	private String password;
	private Book book;

配置文件

Book.hbm.xml

<class name="com.hxzy.hibernate.entity.Book" table="t_book1">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="bookname"></property>
		<many-to-one name="user" column="userid" unique="true" cascade="all"></many-to-one>
</class>

User.hbm.xml

<class name="com.hxzy.hibernate.entity.User" table="t_user1">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="username"></property>
		<property name="password"></property>
		<one-to-one name="book" property-ref="user"></one-to-one>
</class>

数据表结构

Book表

字段名字段类型
idNumber(主键)
booknameVarchar2
userid(外键关联,唯一键)Number

User表

字段名字段类型
idNumber(主键)
usernameVarchar2
passwordVarchar2

8.One to one(基于主键的1对1)(双向)

实体类

Person.java

	private int id;
	private String username;
	private Address address;

Address.java

	private int id;
	private String addrName;
	private User user;

配置文件

Person.hbm.xml

<class name="com.hxzy.hibernate.entity.Person" table="t_person1">
		<id name="id" column="addrid">
			<generator class="foreign">
				<param name="property">address</param>
			</generator>
		</id>
		<property name="username"></property>
		<!-- constrained  使当前主键添加上外键约束 -->
		<one-to-one name="address" constrained="true"></one-to-one>
</class>

Address.hbm.xml

<class name="com.hxzy.hibernate.entity.Address"
		table="t_Address1">
		<id name="id" column="addrid">
			<generator class="native"></generator>
		</id>
		<property name="addrName"></property>
		<one-to-one name="person"></one-to-one>
</class>

数据表结构

Tips:相当于直接把Address的id当成Person的id

Person表

字段名字段类型
addrid(外键关联)Number(主键)
usernameVarchar2

Address表

字段名字段类型
addridNumber(主键)
addrNameVarchar2

9.一对多,多对一(双向)

实体类

Student.java

	private int id;
	private String stuName;	
	private Clazz clazz;

Clazz.java

	private int id;
	private String clsName;
	private Set<Student> students = new HashSet<Student>();

配置文件

Student.hbm.xml

<class name="com.hxzy.hibernate.entity.Student" table="t_Student1">
		<id name="id" column="stuid">
			<generator class="native"></generator>
		</id>
		<property name="stuName"></property>
		<many-to-one name="clazz" column="clsid" cascade="all"/>
</class>

Clazz.hbm.xml

<class name="com.hxzy.hibernate.entity.Clazz" table="t_Clazz1">
		<id name="id" column="clsid">
			<generator class="native"></generator>
		</id>
		<property name="clsName"></property>
		<set name="students" inverse="true">
			<key column="clsid" not-null="true"></key>
			<one-to-many class="com.hxzy.hibernate.entity.Student"/>
		</set>
</class>

数据表结构

Student表

字段名字段类型
stuidNumber(主键)
stuNameVarchar2
Clsid(外键)Number

Clazz表

字段名字段类型
clsidNumber(主键)
clsNameVarchar2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值