这篇讲解 双向的多对一关联映射

1.表结构和多对一时,一致

2.类结构

Book.java

public class Book implements Serializable{
private int id;
private String name;
private String author;
private double price;
private Date pubDate;
private Category category;
public Book() {
}
public Book(String name, String author, double price, Date pubDate) {
super();
this.name = name;
this.author = author;
this.price = price;
this.pubDate = pubDate;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Date getPubDate() {
return pubDate;
}
public void setPubDate(Date pubDate) {
this.pubDate = pubDate;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}

Category.java

public class Category implements Serializable{
private int id;
private String name;
private Set<Book> books = new HashSet<Book>();
public Category() {
} public Category(String name) {
super();
this.name = name;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public Set<Book> getBooks() {
return books;
} public void setBooks(Set<Book> books) {
this.books = books;
}
}

3.映射文件

Book.hbm.xml

<hibernate-mapping package="cn.sxt.pojo">
<class name="Book" table="t_book">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="author"/>
<property name="price"/>
<property name="pubDate"/>
<!-- 多对一的关联关系设置 column指定外键的名称 -->
<many-to-one name="category" column="cid"/>
</class>
</hibernate-mapping>

Category.hbm.xml

<hibernate-mapping package="cn.sxt.pojo">
<class name="Category" table="t_category">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- 双向一对多的设置 -->
<set name="books" inverse="true">
<!-- 设置外键 -->
<key column="cid"></key>
<!-- 设置多的一端的类型 -->
<one-to-many class="Book"/>
</set>
</class>
</hibernate-mapping>

4.测试

public class HibernateTest {
/**
* 生成数据库表的工具方法
* */
@Test
public void testCreateDB(){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
//第一个参数 是否打印sql脚本
//第二个参数 是否将脚本导出到数据库中执行
se.create(true, true);
}
/**
* 初始化表数据
*/
@Test
public void testInit(){
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Category c1 = new Category("计算机类");
Category c2 = new Category("文学");
Category c3 = new Category("历史");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Book b1 = new Book("java","sun",30,df.parse("1995-05-23"));
b1.setCategory(c1);
Book b2 = new Book("struts","apache",40,df.parse("2006-09-12"));
b2.setCategory(c1);
Book b3 = new Book("明朝那些事儿","当年明月",70,df.parse("2008-05-23"));
b3.setCategory(c3);
Book b4 = new Book("水浒传","老撕",20,df.parse("1985-05-23"));
b4.setCategory(c2);
session.save(c1);
session.save(c2);
session.save(c3);
session.save(b1);
session.save(b2);
session.save(b3);
session.save(b4);
tx.commit(); } catch (Exception e) {
if(tx!=null)
tx.rollback();
}finally {
HibernateUtil.close();
}
}
/**
* 在查询多的一端数据时可以获取一的一端的数据
*/
@Test
public void testGetData(){
Session session = HibernateUtil.getSession();
Book book = (Book)session.get(Book.class, 3);
System.out.println(book.getId()+"--"+book.getName()+"---"+book.getAuthor()+
"---"+book.getPrice()+"---"+book.getPubDate()+"---"+book.getCategory().getName());
System.out.println("=============================");
Category c1 = (Category)session.get(Category.class, 1);
System.out.println(c1.getId()+"-----"+c1.getName());
for(Book b:c1.getBooks()){
System.out.println(b);
}
HibernateUtil.close();
}
}

java之hibernate之双向的多对一关联映射的更多相关文章

  1. java之hibernate之单向的多对多关联映射

    这篇 单向的多对多关联映射 1.如何在权限管理中,角色和权限之间的关系就是多对多的关系,表结构为: 2.类结构 Permission.java public class Permission impl ...

  2. Hibernate(六)——多对多关联映射

    前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...

  3. 一口一口吃掉Hibernate(六)——多对多关联映射

    今天来说说hibernate中的多对多关联映射,多对多关联映射涉及到单向映射和双向映射2种. 首先举个多对多关联例子:用户User和角色Role,一个用户可以属于多个角色,一个角色可以有多个用户.这就 ...

  4. java之hibernate之单向的一对多关联映射

    这篇主要讲hiberante中的 单向一对多关联映射 1.在应用中,有时候需要从一的一端获取多的一端的数据.比如:查看某个分类下的所有书籍信息:查看某个订单下的所有商品等. 2.在一对多的关联关系中, ...

  5. (Hibernate进阶)Hibernate映射——多对多关联映射(八)

    多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数 ...

  6. 【SSH进阶之路】Hibernate映射——多对多关联映射(八)

    上篇博文[SSH进阶之路]Hibernate映射——一对多关联映射(七),我们介绍了一对多关联映射,它是多对多关联映射的基础. 多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接 ...

  7. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  8. 【SSH系列】Hibernate映射 -- 多对多关联映射

         映射原理 在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论 ...

  9. 017 多对多关联映射 双向(many-to-many)

    多对多关联映射 双向 两方都持有对象引用,修改对象模型,但数据的存储没有变化. 再修改映射文件: public class Role { private int id; private String ...

随机推荐

  1. vuejs cli3 env配置文件实践指南

    env文件 配置四个环境名字分别 VUE_APP_ENV=dev 只支持:VUE_APP_ 开头,比如设置其它变量 VUE_APP_NAME=stark package.json 配置 方式 &quo ...

  2. fluent将出口温度赋值给入口

    Fluent版本:Fluent18.2 首先我们启动Fluent 然后按照正常的流程进行模型缩放,材料的设置,边界条件的设置等等,然后初始化. 在完成了算例的初始化以后 (define (OutToI ...

  3. Server concepts 详解

    server status 是由 vm_state和task_state 计算出来的,vm_state是虚机当前的稳定状态(例如Active, Error),task_state是虚机当前的瞬间状态( ...

  4. #C++初学记录(set进阶#acm cf 190802 B. Subsegments)

    B. Subsegments#set进阶 Programmer Sasha has recently begun to study data structures. His coach Stas to ...

  5. 作业:分布式文件系统HDFS 练习

    这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292. 利用Shell命令与HDFS进行交互 1.目录操作 H ...

  6. 第10组 Beta冲刺(2/5)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 新增修改用户信息.任务完成反馈等功能API 服务器后端部署,API接口的bet ...

  7. .NET Core Startup启动类

    .NET Framework 早期架构 在.NET Core面世之前,也就是.NET Framework时代,我们的软件架架构有一些比较通用的架构.抛开我们的业务组件,在我们的系统中我们总会有一些基础 ...

  8. 如何连接到远程windows服务器

    在学习和工作中,有些时候我们需要连接到远程服务器,这里,我来演示如何连接到windows服务器. 1. 首先利用快捷键win+r打开运行,或者在搜索框搜索“运行”,然后在运行框输入mstsc,点击确定 ...

  9. 【翻译】Flink Table Api & SQL —Streaming 概念 —— 查询配置

    本文翻译自官网:Query Configuration  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/s ...

  10. 映美FP-530K+打印发票的各种经验

    本人虽然写了很多lodop博文,但是程序开发一般都是用虚拟打印机测试,实际打印机打印中还可能存在各种问题,毕竟理论都不如实践能获得更多的打印经验.当个人使用过的打印机不多,只有映美FP-530K+,用 ...