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(50) NOT NULL, depid INT, FOREIGN KEY (depid) REFERENCES dept(id) ON DELETE CASCADE); CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, dname VARCHAR(100));
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”
实体类中如果有类对象属性,要进行初始化,否则可能得不到正确结果。
如果觉得有用,想赞助一下请移步赞助页面:赞助一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2016-04-26 django中templates阅读笔记