HIBERNATE 实现多对一

一个Product对应一个Category 
一个Category对应多个Product

所以Product和Category是多对一的关系 
本例讲解如何使用Hibernate实现多对一关系

第一步 准备Category.java

 1 package com.ghw.pojo;
 2
 3 public class Category {
 4
 5     public int getId() {
 6         return id;
 7     }
 8     public void setId(int id) {
 9         this.id = id;
10     }
11     public String getName() {
12         return name;
13     }
14     public void setName(String name) {
15         this.name = name;
16     }
17     int id;
18     String name;
19 }

第二步 准备Category.hbm.xml

 1 <?xml version="1.0"?>
 2
 3 <!DOCTYPE hibernate-mapping PUBLIC
 4         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 5         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 6 <hibernate-mapping package="com.ghw.pojo">
 7     <class name="Category" table="category_">
 8         <id name="id" column="id">
 9             <generator class="native">
10             </generator>
11         </id>
12         <property name="name" />
13     </class>
14 </hibernate-mapping>

第三步 在Product.java中添加Category属性和它的setter和getter方法

 1 package com.ghw.pojo;
 2 public class Product {
 3     private int id;
 4     private String name;
 5     private float price;
 6     private Category category;
 7     public Category getCategory() {
 8         return category;
 9     }
10     public void setCategory(Category category) {
11         this.category = category;
12     }
13     public int getId() {
14         return id;
15     }
16     public void setId(int id) {
17         this.id = id;
18     }
19     public String getName() {
20         return name;
21     }
22     public void setName(String name) {
23         this.name = name;
24     }
25     public float getPrice() {
26         return price;
27     }
28     public void setPrice(float price) {
29         this.price = price;
30     }
31 }

第四步 在Hibernate.hbm.xml文件中添加Category.hbm.xml的mappering映射

新增Category映射

 1 <?xml version=‘1.0‘ encoding=‘utf-8‘?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6
 7     <session-factory>
 8         <!-- Database connection settings -->
 9         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
10         <property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=GBK</property>
11         <property name="connection.username">root</property>
12         <property name="connection.password">admin</property>
13         <!-- SQL dialect -->
14         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
15         <property name="current_session_context_class">thread</property>
16         <property name="show_sql">true</property>
17         <property name="hbm2ddl.auto">update</property>
18         <mapping resource="com/ghw/pojo/Product.hbm.xml" />
19         <mapping resource="com/ghw/pojo/Category.hbm.xml" />
20     </session-factory>
21
22 </hibernate-configuration>

第五步 在Product.hbm.xml中设置Category 多对一关系

many-to-one中

name="category" 对应Product类中的category属性

class="Category" 表示对应Category类

column="cid" 表示指向 category_表的外键

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5
 6 <hibernate-mapping package="com.ghw.pojo">
 7     <class name="Product" table="product_">
 8         <id name="id" column="id">
 9             <generator class="native">
10             </generator>
11         </id>
12
13         <property name="name" />
14         <property name="price" />
15         <many-to-one name="category" class="Category" column="cid" />
16     </class>
17
18 </hibernate-mapping>

第六步 TestHibernate 测试many-to-one关系

一定要先保存c再保存p,否则报错抛出异常。

 1 package com.how2java.test;
 2
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.cfg.Configuration;
 6
 7 import com.ghw.pojo.Category;
 8 import com.ghw.pojo.Product;
 9
10 public class TestHibernate {
11     public static void main(String[] args) {
12         SessionFactory sf = new Configuration().configure().buildSessionFactory();
13
14         Session s = sf.openSession();
15         s.beginTransaction();
16
17         Category c =new Category();
18         c.setName("c1");
19         s.save(c);
20
21         Product p = (Product) s.get(Product.class, 8);
22         p.setCategory(c);
23         s.update(p);
24
25         s.getTransaction().commit();
26         s.close();
27         sf.close();
28     }
29 }

原文地址:https://www.cnblogs.com/nuanbear/p/8602354.html

时间: 2024-10-26 13:50:00

HIBERNATE 实现多对一的相关文章

Hibernate单向多对多

最近做一个OA系统,用到了Hibernate框架,我发现,权限和角色的关系是一种多对多的关系,一个权限可以分配给多个角色,一个角色拥有多个权限. 多对多关系有两种,一种是单向的,一种是多向的.对于这个问题,曾经让我很犯难.单纯在语言上理解,会比较复杂,而从代码上理解,可能就会明白了. 下面模拟为角色授权的过程: 1,Hibernate使用Annotation 2,使用Junit进行测试. 3,使用Mysql作为后台数据库. 4,Hibernate不使用自动建表,也不采用反向工程. 过程 : 1,

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

     映射原理 在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张表中做一个关联,用第三张表来解决可能造成的数据冗余问题.今天这篇博文小编来简单的介绍一下hibernate中的多对多关联映射. 在某些系统中,一个用户可以有多个角色,一个角色也可以有多个用户,so,她们之间的关系就是多对多,多对多关联

Hibernate之多对多篇

Hibernate值多对多篇: 首先Hibernate基于数据库持久层框架,好的OR框架.封装了JDBC对数据库繁琐的操作,完全以面向对象的方式来操作数据库,提供了以及一级,二级缓存. 下面就来谈谈Hibernate的优点与缺点: 优点: 1.对jdbc访问数据库进行了封装,简化了繁琐的操作. 2.映射的灵活性 3.非侵入性,移植性好.(就是说只需将你的映射文件及其配置文件移植到相应另一台计算机上照样可以运行,因为表的它是自己检查创建的,这一点非常好,不像Mybatis那 你要去建一个和他的映射

总结Hibernate的多对多关联的4个特点

总结Hibernate的多对多关联的4个特点: 以学生和课程多对多的例子说明,实体类部分代码: public class Course { private Integer cid; private String cname; private Set<Student> stuSet; //getter setter...... } public class Student { private Integer id; private String name; private Date birthd

Hibernate单向多对一级联删除引发的问题

Hibernate单向多对一在级联删除时,会出现一些问题. 下面模拟我遇到的问题: 这次模拟与之前的一次模拟方法一直,博客:http://blog.csdn.net/openjdk8/article/details/38424403 模拟场景:有一个部门表t_dept,职位表t_position. 需求:当删除部门表时,不管职位表有没数据,照样删除.删除职位表就直接删除. 1,建表: 建表: t_dept::部门表 t_position:职位表 CREATE TABLE t_dept(    d

Hibernate映射多对多双向关联关系(小案例)

多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; }

Hibernate annotation多对多配置

角色(用户组),用户多对多. 角色实体配置: private Set<TAuthUser> users; @ManyToMany @JoinTable(name="t_auth_user_role",joinColumns={@JoinColumn(name="role_id")},inverseJoinColumns={@JoinColumn(name="user_id")})//配置一方 public Set<TAuthUs

hibernate中多对多关联

hibernate中多对多关联 “计应134(实验班) 凌豪” 在关系数据库中有一种常见的关系即多对多关系,例如课程和学生的关系,一个学生可以选择多门课程,同时一门课程也可以被多个学生选择, 因此课程与学生的关系就可以看成是多对多的关系,其中课程表的结构如下图所示: 学生表user 在关系数据库中不能直接建立多对多关联,要想建立这种多对多的关系只能借助第三张中间表, 因此为了建立这种多对多的关系我们需要建立第三张表User_course 为了实现表的多对多关联,需要在两个表的Hibernate配

Hibernate的多对多映射关系

example: 老师(teacher)和学生(Student)就是一个多对多的关系吧?老师可以有多个学生,学生也可以由多个老师,那在Hibernate中多对多是怎样实现的呢?? 在Hibernate中多对多关系分为两种:1单向的多对多,2双向的多对多 下面详细说明一些两种有什么不同和实现步骤 I单向的多对多实现步骤: 1新建teacher.student表,可以任意选择在其中一个表添加另一个表的集合,(例如在teacher中添加student的set<Student>集合,例如private