千家信息网

hibernate 一对多 关系映射

发表于:2024-09-25 作者:千家信息网编辑
千家信息网最后更新 2024年09月25日,在关系中,或多或少的表之间有复杂的关联关系这里测试 一对多 关联关系的配置开发步骤就不多说了。直接看一个示例。users 用户 和 shop商品订单表分析:一个用户可以有多个商品订单,一个订单只属于一
千家信息网最后更新 2024年09月25日hibernate 一对多 关系映射

在关系中,或多或少的表之间有复杂的关联关系

这里测试 一对多 关联关系的配置


  1. 开发步骤就不多说了。直接看一个示例。


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对多 上面的可以修改为

  1. users 实体不改变

  2. shop 中的 users去掉

  3. 配置文件中 去掉下面这段配置

4. 配置文件中 inverse="true" 去掉,告诉主表,来维护从表


其他的还是一样操作。

0