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

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. GIT 使用记录,新手->会用(mac 用户)

    (唔,mac 用户这个要求是因为集成在 terminal 中可直接使用) 1. github 中 创建 git 账户 2. github -> 在个人设置中 找到 ssh  and GPGkey ...

  2. Monkey框架(测试方法篇) - monkey测试实例

    一.常规的稳定性测试 测试背景: 这是一个海外的合作项目,被测程序是Android应用(App).测试希望通过Monkey来模拟用户长时间的随机操作,检查被测应用是否会出现异常(应用崩溃或者无响应). ...

  3. 刷题记录:[BUUCTF 2018]Online Tool

    目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...

  4. 第10组 Alpha冲刺(6/6)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 tomcat的学习与实现 服务器后端部署,API接口的beta版实现 后端代码 ...

  5. javassist使用全解析

    Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口.Javaassist 就是一个用来 处理 Java 字节码的类库.它可以在一个已经编 ...

  6. 手把手教你 GitLab 的安装及使用

    前言 新入职公司,发现公司还在使用落后生产工具 svn,由于重度使用过 svn 和 git ,知道这两个工具之间的差异,已经在使用 git 的路上越走越远. 于是,跟上级强烈建议让我在公司推行 git ...

  7. 利用art.template模仿VUE 一次渲染多个模版

    TypeScript代码 import template = require('art-template/lib/template-web'); interface TemplateBindConfi ...

  8. PAT 甲级 1080 Graduate Admission (30 分) (简单,结构体排序模拟)

    1080 Graduate Admission (30 分)   It is said that in 2011, there are about 100 graduate schools ready ...

  9. c的指针和php中的引用的区别

    https://blog.csdn.net/yangfanzn/article/details/44731391 1-php和c中的变量名都会被解析成内存地址,变量名所代表的内存的地址中内容即代表变量 ...

  10. [LeetCode] 304. Range Sum Query 2D - Immutable 二维区域和检索 - 不可变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...