hibernate 一对多 关系映射
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,在关系中,或多或少的表之间有复杂的关联关系这里测试 一对多 关联关系的配置开发步骤就不多说了。直接看一个示例。users 用户 和 shop商品订单表分析:一个用户可以有多个商品订单,一个订单只属于一
千家信息网最后更新 2026年10月31日hibernate 一对多 关系映射
在关系中,或多或少的表之间有复杂的关联关系
这里测试 一对多 关联关系的配置
开发步骤就不多说了。直接看一个示例。
users 用户 和 shop商品订单表
分析:一个用户可以有多个商品订单,一个订单只属于一个用户。
这样就构成了一对多的关联关系。
这里用的是oracle 数据库
users 和 shop 数据库表
create table users( id number(7) primary key, name nvarchar2(20), pass nvarchar2(20), address nvarchar2(50))create table shop( id number(7) primary key, price number(7), sh_name nvarchar2(50), us_id references users(id))
2.users 实体
package com.hib.entity;import java.util.HashSet;import java.util.Set;public class Users { private Integer id; private String name; private String pass; private String address; private Set shop = new HashSet(); public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Set getShop() { return shop; } public void setShop(Set shop) { this.shop = shop; } public Users(Integer id, String name, String pass, String address) { super(); this.id = id; this.name = name; this.pass = pass; this.address = address; } public Users() { super(); } @Override public String toString() { return "Users [id=" + id + ", name=" + name + ", pass=" + pass + ", address=" + address + "]"; }} shop 实体
package com.hib.entity;public class Shop { private Integer id; private Integer price; private String sh_name; private Users users; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getSh_name() { return sh_name; } public void setSh_name(String sh_name) { this.sh_name = sh_name; } public Integer getPrice() { return price; } public void setPrice(Integer price) { this.price = price; } public Users getUsers() { return users; } public void setUsers(Users users) { this.users = users; } public Shop(Integer id, String sh_name, Integer price) { super(); this.id = id; this.sh_name = sh_name; this.price = price; } public Shop() { super(); } @Override public String toString() { return "Shop [id=" + id + ", sh_name=" + sh_name + ", price=" + price + "]"; } }3.shop.hbm.xml映射文件配置
4. 不要忘记注册。
oracle.jdbc.OracleDriver ssh ssh jdbc:oracle:thin:@127.0.0.1:1521:xe org.hibernate.dialect.Oracle10gDialect true true thread
5.测试 级联插入测试
@Test public void insert(){ Session session = HibUtil.getSession(); Transaction tx = session.beginTransaction(); Users users = new Users(null, "苦力强", "kuliqiang", "zg"); Shop shop = new Shop(null, "橙子", 2800); users.getShop().add(shop); shop.setUsers(users); session.save(users); tx.commit(); }记得要设置级联关系。
测试 查询
@Test public void query(){ Session session = HibUtil.getSession(); Transaction tx = session.beginTransaction(); Users users = (Users)session.get(Users.class, 1); for (Shop shop : users.getShop()) { System.out.println(shop); } System.out.println(users); tx.commit(); }更新和删除就不测试了,更新先查询出来,再修改值,然后更新就可以了。
删除直接查询出来,删除就可以了。
如果是单向的1对多 上面的可以修改为
users 实体不改变
shop 中的 users去掉
配置文件中 去掉下面这段配置
4. 配置文件中 inverse="true" 去掉,告诉主表,来维护从表
其他的还是一样操作。
测试
配置
实体
文件
用户
订单
关联
更新
查询
商品
数据
数据库
复杂
之间
单向
多个
橙子
步骤
示例
苦力
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州万易互联网科技有限公司
互联网科技公司华为
没上市的科技互联网公司
深圳互联网科技公司
期待互联网科技
安徽鑫晟辉互联网科技
亿人帮互联网科技
美国互联网前沿科技
北京华百购互联网科技有限公司
南平创想时代互联网科技有限公司
和信科技工业互联网
互联网科技产业特征
注册互联网科技公司经营范围大全
苏州铭阳互联网科技有限公司
互联网行业科技股
中科明德北京互联网科技
锡山区互联网智能科技产品供应
互联网科技包装股
云鲸互联网络科技有限公司
广州三三互联网科技有限公司
小米移动互联网科技园
互联网科技名片
华服互联网科技靠谱吗
广州紫鲸互联网科技有限公司
互联网与科技发展
互联网科技社
奇酷互联网科技
衡水科技产业互联网平台
阿里互联网科技公司
互联网高科技行业有哪些企业