多对多实现(xml文件配置)

    技术2022-05-20  53

    1.编写javaBean(set,get,默认无参数构造方法)

    2.编写映射文件

    3.测试

    一: 标准JavaBean

    package bean; import java.util.Date; import java.util.HashSet; import java.util.Set; public class Persion { private int id; private String pname; private int age; private String email; private String telphone; private Date birthday; private Set event = new HashSet(); public Persion() { } public Persion(String pname, int age, String email, String telphone, Date birthday) { super(); this.pname = pname; this.age = age; this.email = email; this.telphone = telphone; this.birthday = birthday; this.event = event; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getTelphone() { return telphone; } public void setTelphone(String telphone) { this.telphone = telphone; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Set getEvent() { return event; } public void setEvent(Set event) { this.event = event; } }

    package bean; import java.util.Date; import java.util.HashSet; import java.util.Set; public class Persion { private int id; private String pname; private int age; private String email; private String telphone; private Date birthday; private Set event = new HashSet(); public Persion() { } public Persion(String pname, int age, String email, String telphone, Date birthday) { super(); this.pname = pname; this.age = age; this.email = email; this.telphone = telphone; this.birthday = birthday; this.event = event; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getTelphone() { return telphone; } public void setTelphone(String telphone) { this.telphone = telphone; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Set getEvent() { return event; } public void setEvent(Set event) { this.event = event; } }

    二:映射文件编写

    Event.hbm.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 table="event" name="bean.Event"> <id column="eid" name="eid"> <generator class="native"></generator> </id> <property name="title" type="java.lang.String" column="title"></property> <property name="date" type="java.util.Date" column="data"></property> <!-- inverse = false 的一方为主控方,在Event.hbm.xml中inverse为true所以主控方为Persion --> <set name="persion" table="persion_event" inverse="true"> <key column="eid"></key> <many-to-many class="bean.Persion" column="pid"></many-to-many> </set> </class> </hibernate-mapping>

    Event.hbm.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 table="persion" name="bean.Persion"> <id column="id" name="id"> <generator class="native"></generator> </id> <property name="pname" column="pname" type="java.lang.String"></property> <property name="age" column="age" type="int"></property> <property name="email" column="email" type="java.lang.String"></property> <property name="telphone" column="telphone" type="java.lang.String"></property> <property name="birthday" column="birthday" type="java.util.Date"></property> <!-- inverse = false 的一方为主控方,所以主控方为Persion --> <!-- cacade 级联 all:全部操作, none:不级联 save-update:save,update,saveOrUpdate 执行级联操作 delete:在执行删除时候进行级联操作 delete-orphan: 包含了delete和delete-orphan的行为。 在删除时候,不仅仅把中间表记录删除,还会把相关的也 删除 例如:一个人对应多个活动,一个活动也可以有多个人参与,当删除这个人得时候, delete只是把中间表格删除 delete-orphan:除了把中间表删除还会把中间表对应的活动给删除,如果别人也参与了这个活动则会报异常。 --> <set name="event" table="persion_event" inverse="false" cascade="delete-orphan"> <key column="pid"></key> <many-to-many class="bean.Event" column="eid"></many-to-many> </set> </class> </hibernate-mapping>

    三、测试代码

    package bean; import java.util.Date; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import util.HibernateUtil; public class PersionTest { private static Session session; @BeforeClass public static void beforeClass(){ //session = HibernateUtil.getSessionFactory().openSession(); } @Test public void testSaveEvent(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction trans = session.beginTransaction(); try{ Event event1 = new Event("snow", new Date()); session.save(event1); trans.commit(); }catch(HibernateException e){ e.printStackTrace(); trans.rollback(); } } @Test public void testSaveEvents(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction trans = session.beginTransaction(); try { Event event1 = new Event("融雪", new Date()); Event event2 = new Event("结冰", new Date()); session.save(event1); session.save(event2); trans.commit(); session.close(); } catch (Exception e) { trans.rollback(); e.printStackTrace(); } } @Test public void testSavePersions(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction trans = session.beginTransaction(); try { Persion persion1 = new Persion("zhagnsan", 27, "liweninet@126.com", "1352147****", new Date()); Persion persion2 = new Persion("wangwu", 35, "liweninet@126.com", "1352147****", new Date()); session.save(persion1); session.save(persion2); trans.commit(); session.close(); } catch (Exception e) { trans.rollback(); e.printStackTrace(); } } @Test /*搁浅可以参与2个活动,玩游戏和打篮球*/ public void testSavePersionAndEvents(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction trans = session.beginTransaction(); try{ //添加2个活动 Event event1 = new Event("打篮球", new Date()); Event event2 = new Event("玩游戏", new Date()); //添加1个新人物 Persion persion = new Persion("搁浅", 25, "xiaowei1123ymhr@126.com", "1352147****", new Date()); persion.getEvent().add(event1); persion.getEvent().add(event2); session.save(persion); trans.commit(); session.close(); }catch(Exception e){ trans.rollback(); e.printStackTrace(); } } @Test /*新创建liwen,liwen也可以玩游戏,把liwen也绑定到事件上*/ public void testLoadPersionAndEvent(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction trans = session.beginTransaction(); try{ Persion persion = new Persion("liwen", 25, "liweninet@126.com", "1352147****", new Date()); Event event1 = (Event) session.load(Event.class,12); persion.getEvent().add(event1); session.save(persion); trans.commit(); }catch(Exception e){ trans.rollback(); e.printStackTrace(); } } @Test /*删除搁浅参与的全部互动*/ public void testClearPersionEvents(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction trans = session.beginTransaction(); try{ Persion persion = (Persion)session.load(Persion.class, 13); persion.getEvent().clear(); session.update(persion); trans.commit(); }catch(Exception e){ trans.rollback(); e.printStackTrace(); } } @Test /*删除搁浅*/ public void testDeletePersion(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction trans = session.beginTransaction(); try{ Persion persion = (Persion)session.load(Persion.class, 13); //persion.getEvent().clear(); session.delete(persion); trans.commit(); }catch(Exception e){ trans.rollback(); e.printStackTrace(); } } @AfterClass public static void afterClass(){ //HibernateUtil.closeSessionFatory(); } }

     

     


    最新回复(0)