hibernate中对象集合的保存
一、在java web设计中经常使用对象进行操作,在hibernate中对象集合的保存(一对多)
1需要进行如下步骤:
1) 设计数据表关系
2)引入jar包,需要注意引入数据库connector
3)写实体类
4)配置映射文件和hibernate.cfg.xml
2例子如下:
员工和部门的关系,多个员工属于一个部门,一个部门有多个员工。可以在员工表上设置一个外键解决一对多的关系。
2.1)创建表
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR() NOT NULL,
depid INT,
FOREIGN KEY (depid) REFERENCES dept(id) ON DELETE CASCADE); CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR());
2.2)引入jar包

2.3)写实体类
员工类
public class Employee {
private int id;
private String ename;
private Dept dept = new Dept();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
}
部门类
public class Dept {
private int id;
private String dname;
private Set<Employee> employees = new HashSet<Employee>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
}
2.4)配置映射文件
部门映射文件,dept.hbm.xml
<hibernate-mapping
package="com.baidu.entity">
<class name="Dept" table="dept">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="dname" column="dname"></property> <set name="employees" table="emploee">
<key column="depid"></key>
<one-to-many class="Employee"/>
</set> </class>
</hibernate-mapping>
注意:在配置一对多的时候,部门对员工是一对多,要配置的内容set
1)集合属性是哪一个,employees
2)该集合属性存储对象对应的表,employee
3)该表的外键,depid
4)集合中存储对象的类型,class=Employee
员工映射文件,employee.hbm.xml
<hibernate-mapping
package="com.baidu.entity">
<class name="Employee" table="employee">
<id name="id" column="id">
<generator class="native"/>
</id> <property name="ename" column="ename"></property>
<many-to-one name="dept" class="Dept" column="depid"></many-to-one>
</class> </hibernate-mapping>
注意:在配置多对一的时候,员工对部门是多对一。要配置的内容many-to-one
1)哪个对象要映射
2)该表哪个外键与对象关联
3)映射对象的类型
全局配置hibernate.cfg.xml,可以查看之前博客hibernate开发流程
3 简单测试
public void fun1(){
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFac = configuration.buildSessionFactory();
Session session = sessionFac.openSession();
Transaction bt = session.beginTransaction();
Dept dept = new Dept();
dept.setDname("test");
Employee employee = new Employee();
employee.setEname("test3");
employee.setDept(dept);
Employee employee2 = new Employee();
employee2.setEname("test4");
employee2.setDept(dept);
session.save(employee);
session.save(employee2);
session.save(dept);
bt.commit();
session.close();
sessionFac.close();
}
需要说明的是
在表中是通过外键来表达一对多或多对一的关系;在类中是通过对象集合来表达,例如set/list/map;在配置文件中需要注意set/list/map的配置
哪一张表有外键就操作该表对应那个对象进行添加另外的对象,不然会出问题。
在hibernate中想要将一个对象映射成一个外键字段,只有many-to-one
在使用对象进行保存时,如果想要正确保存关联的对象时需要设置cascade属性为“save-update”,或者“all”
实体类中如果有类对象属性,要进行初始化,否则可能得不到正确结果。
hibernate中对象集合的保存的更多相关文章
- ORM进阶之Hibernate中对象的三大状态解析
ORM进阶之 ORM简单介绍 ORM进阶之Hibernate简单介绍及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 在Hibernatea中每一 ...
- 关于hibernate中对象的三种状态分析
一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load ...
- Hibernate中使用@Lob 注解保存String[] 问题
Hibernate中使用@Lob 注解保存String[] 问题 在Hibernate注解中怎样你想保存一个字段为String数组类型.假设你想尝试保存为clob类型的话,普通情况下为定义为: @En ...
- hibernate 中对象的3种状态总结
1.Hibernate把对象分文三种状态:Transient(临时状态).Persistent(持久化状态).Detached(游离状态). 1)Transient:刚刚new出来的对象,就是Tran ...
- hibernate中对象的3种状态:瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)
Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached). 处于持久态的对象也称为PO(Persistence Objec ...
- Hibernate中对象的3种状态:瞬时态、持久态、脱管态
Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久 态的对象也称为PO(Persistence Objec ...
- Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别
首先,用一张图说明一个对象,在Hibernate中,在调用了不同方法之后对象所处的不同状态 在Hibernate中,一个对象的状态可以被分为如图所示的三种 Transient:瞬时对象,该对象在数据库 ...
- hibernate中对象的3种状态----瞬时态、持久态、脱管态
Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...
- hibernate 中多对多关系对象集合的保存
多对多关系映射和一对多关系映射开发步骤差不多, 例子如下:员工和项目之间的关系,一个员工可以参与多个项目:一个项目可以有多个开发人员参与.因此是多对多的关系. 1 分析数据表 1.1)员工表 CREA ...
随机推荐
- Percona-Toolkit学习之安装和配置
http://blog.chinaunix.net/uid-26446098-id-3390779.html
- Fragment 简介 基础知识 总结 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- jQuery调用ajax获取json格式数据
<body> <div>点击按钮获取音乐列表</div> <input type="button" id="button&quo ...
- 要点Java20 java.util.Collections
java.util.Collections 集合帮助类 演示样例程序(JUnit演示) 排序 @Test public void testSort() { List<Integer> de ...
- Cognos TM1_10.1.1服务端安装
出于对bi行业的强大热爱,出于对cognos tm1的强大兴趣,于是就想研究一下Cognos TM1(table manager one),今天就分享一下自己微不足道研究成果,真可谓是tm1的九牛一毛 ...
- Win下执行Swing程序的BAT文件 和 Linux下执行Swing程序的SH文件
BAT文件: @echo off set CLASSPATH_BAK=%CLASSPATH% set classpath=%CLASSPATH%;.\lib\commons-codec-1.3.jar ...
- discuz,ecshop的伪静态规则(apache+nginx)
discuz(nginx): (备注:该规则也适用于二级目录) rewrite ^([^\.]*)/topic-(.+)\.html$ $/portal.php?mod=topic&topic ...
- ejs和swig对比的问题之一
本来想测试下两者在nodejs中得执行速度,设置了一个测试数据,如下 var testData = { title:'测试标题', description: '<p>这是一个描述,里面用很 ...
- ExplorerControls的显示问题
我们都知道ArcGIS桌面版本"添加数据"的功能是弹出一选择对话框,如下图所示,但我们总想搞自己的,以便融入自己的风格.下图左边是ArcGIS自带的"添加数据" ...
- 一个完整的C++程序SpreadSheet - 1) 类的声明和定义
1. SpreadsheetCell.h #pragma once #include <string> class SpreadsheetCell { public: void setVa ...