ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javaweb-Hibernate关联关系

2020-11-19 11:32:24  阅读:139  来源: 互联网

标签:Category Hibernate javaweb 成员 private 关联 Book Set


1、Hibernate关联关系

1.1、单向关联

实体对象

实体对象之间的加载关系是单向的,即两个实体对象中只有一个可以访问另一个。

持久类

A类:必须添加保存B类数据的成员。B为一,则A成员为private B b;|B为多,则A成员为private Set<B> b;

B类:不添加。

1.2、双向关联

实体对象

实体对象之间的加载关系是双向的,即两个实体对象都可以访问另一个。

持久类

A类:必须添加保存B类数据的成员。B为一,则A成员为private B b;|B为多,则A成员为private Set<B> b;

B类:必须添加保存A类数据的成员。A为一,则B成员为private A a;|A为多,则B成员为private Set<A> a;

1.3、关联映射

(Book- Category)-->(书-类别)

1.3.1、多对一(单向)

A类:Book。B为一,则Book成员为private Category category;

B类:Category

<!--映射文件Book.hbm.xml-->
<many-to-one name="category" class="Category">
      <column name="categoryId"/>
</many-to-one>

categoryId:数据库Book表中与category属性值相关联的字段名。用于存放Category表中的id值

  • 访问:
book.getCategory().getName();

1.3.2、多对一(双向)

A类:Book。B为一,则Book成员为private Category category;

B类:Category。A为多,则Category成员为private Set<Book> books;

<!--映射文件Book.hbm.xml-->
<many-to-one name="category" class="Category">
      <column name="categoryId"/>
</many-to-one>
<!--映射文件Category.hbm.xml-->
<set name="books">
  <key column="categoryId"/>
  <one-to-many class="Book"/>
</set>

categoryId:数据库Book表中与category属性值相关联的字段名。用于存放Category表中的id值

  • 访问:
//查找类别对象//得到代理对象
Category c = (Category) session.load(Category.class, new Integer(1));
System.out.println("类别名称:" + c.getName());

//获取类别中的所有图书
Set<Book> books = c.getBooks();
//通过迭代输出图书名称
for (Iterator<Book> it = books.iterator(); it.hasNext();) {
        Book book2 = (Book) it.next();
        System.out.println("图书名称:" + book2.getName());
}

1.3.3、一对一主键(双向)

(User-IdCard)-->(用户-身份证)

User持久化类成员::private IdCard idCard;

<!--主类映射文件User.hbm.xml-->

<!-- 一对一映射 -->
<one-to-one name="idCard"/>

IdCard持久化类成员:private User user;

<!--从类映射文件IdCard.hbm.xml-->

<id name="id">
	<!-- 参考User的外键 -->
	<generator class="foreign">
		<param name="property">user</param>
	</generator>
</id>
<!-- 一对一映射 -->
<one-to-one name="user" constrained="true"/>

name="user":指定持久化类中的属性名称。

constrained:用于建立一个约束,表明IdCard对象的主键必须参照User的外键。

  • 在数据库中创建相关表:
//在servlet中使用SchemaExport类的create()方法创建两个表结构并建立关联关系
Configuration cfg=new Configuration().configure();//加载Hibernate配置文件
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);//第1个参数:是否覆盖原有的数据库,第2个参数:是否新建数据库。

1.3.4、一对一外键

(User-IdCard)-->(用户-身份证)

User持久化类成员::private IdCard idCard;

<!--主类映射文件User.hbm.xml-->

<!-- 一对一映射 -->
<many-to-one name="idCard" unique="true"/>

使用unique="true"会对此外键生成唯一约束。

1.3.5、多对多

  • 多对多关联映射通过第3张表实现,也分为单向关联和双向关联映射。
  • 在两个映射文件中都要添加第3张表的说明。

(Student-Course)-->(学生-课程)

Student持久化类成员::private Set<Course> course;

<!--映射文件Student.hbm.xml-->
<set name="course" table="tb_student_course">
    <key column="studentId"></key>
    <many-to-many class="Course" column="courseId"/>
</set>

Course持久化类成员::private Set<Student> students;

<!--映射文件Course.hbm.xml-->
<set name="students" table="tb_student_course">
    <key column="courseId"/>
    <many-to-many class="Student" column="studentId"/>
</set>
  • table="tb_student_course"

    • 用于指定映射的第3张表。
    • 指定第3张表形成的字段。
  • * many-to-many:映射多对多关联关系。 * class:指定关联的对象。 * column:指定关联的字段。

标签:Category,Hibernate,javaweb,成员,private,关联,Book,Set
来源: https://www.cnblogs.com/2020-6-12/p/14004560.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有