Hibernate 一对多的联系(Set关联) 对象关系映射

来源:互联网 发布:会员卡计费系统c语言 编辑:程序博客网 时间:2024/06/06 03:39
配置xml文件

有两个,在主配置文件中配置一对多的联系:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">          <hibernate-mapping><class name="star.july.d_one2many.User" table="o_user">                             <id name="id" column="uid">                                      <generator class="native"></generator>                             </id>                             <property name="name" column="name"></property>                             <!-- 一对多set集合映射                                      table:不需要配置                                      key,外键                                      cascade:                                                save-update:保存和更新操作                                                delete:删除操作                                                all:save-update+delete                             -->                             <set name="address" cascade="save-update">                                      <key column="uid"></key>                                      <one-to-many class="star.july.d_one2many.Address"/>                             </set>                   </class>                             </hibernate-mapping>


另一个配置文件,存放地址的:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">          <hibernate-mapping><class name="star.july.d_one2many.Address" table="t_address">                             <id name="id" column="id">                                      <generator class="native"></generator>                             </id>                             <property name="name" column="name"></property>                             <property name="zipcode" column="zipcode"></property>                             <property name="phone" column="phone"></property>                             <property name="address" column="address"></property>                   </class>                             </hibernate-mapping>


创建实体类
在主类中创建关联对象:


package star.july.d_one2many;import java.util.HashSet;import java.util.Set;public class User {    private int id;    private String name;    //关联对象    private Set<Address> address =new HashSet<Address>();        public Set<Address> getAddress() {        return address;    }    public void setAddress(Set<Address> address) {        this.address = address;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }        @Override    public String toString() {        return "User [id=" + id + ", name=" + name + ", address=" + address                + "]";    }        }


存放地址类

package star.july.d_one2many;public class Address {    private int id;    private String name;    private String zipcode;    private String phone;    private String address;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getZipcode() {        return zipcode;    }    public void setZipcode(String zipcode) {        this.zipcode = zipcode;    }    public String getPhone() {        return phone;    }    public void setPhone(String phone) {        this.phone = phone;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    @Override    public String toString() {        return "Address [id=" + id + ", name=" + name + ", zipcode=" + zipcode                + ", phone=" + phone + ", address=" + address + "]";    }        }



测试:

package star.july.d_one2many;import java.util.Set;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import star.july.util.HibernateUtil;//set集合public class SetDemo {    //添加    @Test    public void test1(){        Session session = HibernateUtil.getSession();        //获取事务对象        Transaction ts = session.getTransaction();        try{            ts.begin();                        //创建对象            User u = new User();    //      u.setId(3);            u.setName("小年");                        Address address = new Address();            address.setName("姜妮");            address.setPhone("1392388948");            address.setZipcode("524088");            address.setAddress("北凉龙虎山");                        Address address2 = new Address();            address2.setName("大红薯");            address2.setPhone("1567384048");            address2.setZipcode("524000");            address2.setAddress("北莽");                        //保存收货地址            u.getAddress().add(address);            u.getAddress().add(address2);                        session.save(u);//          session.save(address);                                    ts.commit();            HibernateUtil.close(session);        }catch(Exception e){            e.printStackTrace();            ts.rollback();        }            }                //查询    @Test    public void test2(){        Session session = HibernateUtil.getSession();        //获取事务对象        Transaction ts = session.getTransaction();        try{            ts.begin();                    User u = (User)session.get(User.class, 2);            Set<Address> ads = u.getAddress();            //对象遍历输出            for(Address a : ads){                System.out.println(a);            }            ts.commit();            HibernateUtil.close(session);        }catch(Exception e){            e.printStackTrace();            ts.rollback();        }            }                    //修改        @Test        public void test3(){            Session session = HibernateUtil.getSession();            //获取事务对象            Transaction ts = session.getTransaction();            try{                ts.begin();                                //先查询会员                User u  = (User)session.get(User.class, 2);                //再修改                Address a = (Address) session.get(Address.class, 3);                //移除两者之间的关系,即把外键变为null                u.getAddress().remove(a);                //删除收货地址                session.delete(a);                                ts.commit();                HibernateUtil.close(session);            }catch(Exception e){                e.printStackTrace();                ts.rollback();            }                    }}


0 0