博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java之hibernate之单向的一对多关联映射
阅读量:5038 次
发布时间:2019-06-12

本文共 4431 字,大约阅读时间需要 14 分钟。

这篇主要讲hiberante中的 单向一对多关联映射

1.在应用中,有时候需要从一的一端获取多的一端的数据。比如:查看某个分类下的所有书籍信息;查看某个订单下的所有商品等。

2.在一对多的关联关系中,表的设计为:

从表的设计中可以看出,表结构和多对一的表结构相同

3.类的设计

Book.java

public class Book implements Serializable{    private int id;    private String name;    private String author;    private double price;    private Date pubDate;    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;    }}

Category.java

public class Category implements Serializable{    private int id;    private String name;    private Set
books = new HashSet<>(); 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
getBooks() { return books; } public void setBooks(Set
books) { this.books = books; }}

4.映射文件

Book.hbm.xml

Category.hbm.xml

此处,如果package没写,class name=”cn.swy.pojo.Category”并且<one-to-many class=”cn.swy.pojo.Book”

5.测试

public class HibernateTest {    /**     * 生成数据库表的工具方法     * */    @Test    public void testCreateDB(){        Configuration cfg = new Configuration().configure();        SchemaExport se = new SchemaExport(cfg);        //第一个参数  是否打印sql脚本        //第二个参数 是否将脚本导出到数据库中执行        se.create(true, true);    }    /**     * 初始化表数据     * 使用一对多的方式来保存数据,会执行update语句来更新外键     * 使得效率会比多对一的方式效率低     */    @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"));            Book b2 = new Book("struts","apache",40,df.parse("2006-09-12"));            Book b3 = new Book("明朝那些事儿","当年明月",70,df.parse("2008-05-23"));            Book b4 = new Book("水浒传","老撕",20,df.parse("1985-05-23"));            //设置关系            c1.getBooks().add(b1);            c1.getBooks().add(b2);            c2.getBooks().add(b4);            c3.getBooks().add(b3);            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();        Category c1 = (Category)session.get(Category.class, 1);        System.out.println(c1.getId()+"----"+c1.getName());        System.out.println("-----------------");        for(Book book:c1.getBooks()){            System.out.println(book);        }        HibernateUtil.close();    }}

 

转载于:https://www.cnblogs.com/Vincent-yuan/p/11198623.html

你可能感兴趣的文章
Sam做题记录
查看>>
hexo 搭建博客
查看>>
建造者模式(屌丝专用)
查看>>
Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
查看>>
C++的引用
查看>>
python itertools
查看>>
http://lorempixel.com/ 可以快速产生假图
查看>>
编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成...
查看>>
文件操作
查看>>
NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
查看>>
graphite custom functions
查看>>
ssh无密码登陆屌丝指南
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
[CF803C] Maximal GCD(gcd,贪心,构造)
查看>>
oracle连接的三个配置文件(转)
查看>>
Java 8 中如何优雅的处理集合
查看>>
[HNOI2012]永无乡 线段树合并
查看>>
Centos下源码安装git
查看>>
gulp-rev-append md5版本号
查看>>
IO流之File类
查看>>