Hibernate的many-to-many双向关联需要注意的要求及简单示例

 

在做hbiernate的many-to-many的双向关联时,需要了解的几点:

 

一方要设置inverse="true",另一方要设置inverse="false"。inverse="false"的一方保存时,维护多对多之间的关系,且只要将相互的关系告诉这一方即可。

 

如果inverse都设置为true,双方的关系将都不到维护。

 

如果都设置为false,双方将共同维护之间的关系,这时,要将双方的包含关系都要设置清楚,否则将会导致关系维护混乱。

 

如果设置了casade="save-update",只能设置一方,如果双方都设置的话,当更新一方的时候,同时会更新另一方,另一方的更新又会导致一方的更新。

 

下例是一个多对多的代码演示,一个演员可以演多个角色,相反一个角色也可以由多个演员来演:

 

第一步:先间两个JavaBean类

 

public class EmployeePO { private int id; private String name; private Set roleSet = new HashSet();//角色集合 } public class RolePO { private int id; private String name; private Set employeeSet = new HashSet();//演员 }

 

第二步配置其hbm.xml文件:EmployeePO.hbm.xml配置

 

 

RolePO.hbm.xml配置


 

 

第三步配置映射文件hibernate.cfg.xml

 

sa jdbc:jtds:sqlserver://localhost:1433/P org.hibernate.dialect.SybaseDialect line update 123 net.sourceforge.jtds.jdbc.Driver true

 

 

第四步写一个DAO

 

 

public class ManyToManyDao { //多对多用例 public void test(EmployeePO e1,EmployeePO e2,RolePO r1,RolePO r2){ Session session = HibernateSessionFactory.getSession();//自动生成HibernateSessionFactory.java类的方法 Transaction transaction = session.beginTransaction(); session.save(r1); session.save(r2); transaction.commit(); session.close(); } }

 

第五步测试:

 

public class MyTest { public static void main(String[] args) { //多对多测试 EmployeePO e1 = new EmployeePO(); EmployeePO e2 = new EmployeePO(); RolePO r1 = new RolePO(); RolePO r2 = new RolePO(); r1.setName("警察"); r2.setName("杀手"); e1.setName("刘德华"); e2.setName("梁朝伟"); e1.getRoleSet().add(r1); e2.getRoleSet().add(r1); e2.getRoleSet().add(r2); r1.getEmployeeSet().add(e1); r1.getEmployeeSet().add(e2); r2.getEmployeeSet().add(e2); anyToManyDao mmdao=new ManyToManyDao(); mmdao.test(e1, e2, r1, r2); } }

 

 

你可能感兴趣的:(分布式/JEE的框架们)