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 ...
随机推荐
- ubuntu14.04 内核升级到 linux kernel 4.9
http://blog.csdn.net/liuruiqun/article/details/55097292
- x64 寄存器使用
http://blog.csdn.net/cosmoslife/article/details/8771773 http://blog.csdn.net/herx1/article/details/3 ...
- artDialog双击会关闭对话框的修改
artDialog,一个jquery的对话框插件,很好用的说 但是在使用时发现鼠标双击时会自半对话框,查看源码发现有个监听鼠标双击的事件如下图: 简单的方法就是把该行去掉,为了扩展可改成如下图: 这样 ...
- .net程序保护方式大观
.net软件保护方式大观 最近调试一个运行于.net 2.0下的软件,发现该软件使用的保护方式很具有代表性,基本囊括了现在.net下的所有保护措施.实践证明,这些保护措施就像全真七子,单打独斗功力差了 ...
- svn 冲突
转载:http://blog.sina.com.cn/s/blog_65fd4c1e0100h2cg.html 1. 如何产生冲突 当开发人员A和开发人员B从版本库同时检出文档1.txt,而A和B同 ...
- 解析天气预报JSON数据
解析天气预报JSON数据 JSON字符串 constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'"status" ...
- Eclipse搭建Gradle环境
转自:http://blog.sina.com.cn/s/blog_4b20ae2e0102uz4t.html 1.上Grandle官网下载Gradle,地址:http://www.gradle.or ...
- easyui 隔行渐变色属性设置
1.部分JS文件 function getAgencyDealTable(begin,end,regionFlag,agencyId){ $('#reportList').datagrid({ idF ...
- udp_client.c udp_server.c
#include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> ...
- JQuery 动态提交form
function exportExcel() { var merchantName = $('#merchantName').val(); var merchantNo = $('#merchantN ...