java之hibernate之双向的多对一关联映射
这篇讲解 双向的多对一关联映射
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之双向的多对一关联映射的更多相关文章
- java之hibernate之单向的多对多关联映射
这篇 单向的多对多关联映射 1.如何在权限管理中,角色和权限之间的关系就是多对多的关系,表结构为: 2.类结构 Permission.java public class Permission impl ...
- Hibernate(六)——多对多关联映射
前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...
- 一口一口吃掉Hibernate(六)——多对多关联映射
今天来说说hibernate中的多对多关联映射,多对多关联映射涉及到单向映射和双向映射2种. 首先举个多对多关联例子:用户User和角色Role,一个用户可以属于多个角色,一个角色可以有多个用户.这就 ...
- java之hibernate之单向的一对多关联映射
这篇主要讲hiberante中的 单向一对多关联映射 1.在应用中,有时候需要从一的一端获取多的一端的数据.比如:查看某个分类下的所有书籍信息:查看某个订单下的所有商品等. 2.在一对多的关联关系中, ...
- (Hibernate进阶)Hibernate映射——多对多关联映射(八)
多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数 ...
- 【SSH进阶之路】Hibernate映射——多对多关联映射(八)
上篇博文[SSH进阶之路]Hibernate映射——一对多关联映射(七),我们介绍了一对多关联映射,它是多对多关联映射的基础. 多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接 ...
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- 【SSH系列】Hibernate映射 -- 多对多关联映射
映射原理 在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论 ...
- 017 多对多关联映射 双向(many-to-many)
多对多关联映射 双向 两方都持有对象引用,修改对象模型,但数据的存储没有变化. 再修改映射文件: public class Role { private int id; private String ...
随机推荐
- 排序---希尔排序Java
希尔排序 插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减 ...
- 使用PLSQL导入excel数据至oracle数据库
https://blog.csdn.net/qq_42909551/article/details/82108754 https://jingyan.baidu.com/album/14bd256e2 ...
- mysql监控工具sqlprofiler,类似sqlserver的profiler工具安装(一)
最近无意发现了mysql的客户端监控工具“Nero Profile SQL”,刚开始还不知道怎么使用,经过半小时摸索,现将使用步骤写下来. 背景:开发的时候,如果数据存储层这块使用EF,或者其他orm ...
- Spring cloud微服务安全实战-7-2docker快速入门
因为后面运行的这些可视化的工具都是用docker去run 的.为了避免对docker完全没有概念的同学听不懂,帮助大家从概念上去理解docker是个什么东西. 最核心的东西就是镜像,把它理解为Spri ...
- Spring IOC 三种注入方式(构造器,setter,接口)
Spring的依赖注入有三种方式: 1,构造器注入 2,setter注入 3,接口注入 下面我给大家介绍一下这三种注入 1.构造器注入 构造器注入主要是依赖于构造方法去实现,构造方法可以是有参也可以是 ...
- curl 转 wget
curl 转 wget // sed -e 's@-H @--header=@g;s@^curl @wget @g;s@--compressed$@@g' $crf var curlStr = `cu ...
- Jmeter-Critical Section Controller(临界区控制器)(还没看,是一个控制请求按顺序执行的东东)
The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will ...
- 嵌入式LINUX基础教程 第2版
嵌入式LINUX基础教程 第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...
- 【翻译】Flink Table Api & SQL —Streaming 概念 ——动态表
本文翻译自官网:Flink Table Api & SQL 动态表 https://ci.apache.org/projects/flink/flink-docs-release-1.9/de ...
- MUD游戏开发教程视频
MUD游戏开发教程视频 https://space.bilibili.com/476328540/channel/detail?cid=91187