基于map集合映射
1、 实体类中使用List集合
publicclass Grade { privateintid; private String name; private Map<String,Student> students = new HashMap<String,Student>(0);
}
|
2、 映射文件
<hibernate-mapping package="cn.siggy.pojo"> <class name="Grade"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <map name="students" cascade="all"> <!-- key表示外键 --> <key column="grade_id"/> <!-- map-key是映射为map集合时,对应key值 key值建议为唯一 --> <map-key type="string" column="name"/> <one-to-many class="Student"/> </map> </class> </hibernate-mapping> |
3、 测试代码
@Test publicvoid testSave() throws HibernateException, SerialException, SQLException{ Configuration cfg = new Configuration().configure(); SessionFactory factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder() .applySettings(cfg.getProperties()).build()); Session session = null; Transaction tx = null; try{ session = factory.openSession(); tx = session.beginTransaction(); Grade grade = new Grade(); grade.setName("基础");
Student stu = new Student(); stu.setName("张三疯"); stu.setAge(22); Student stu1 = new Student(); stu1.setName("老王"); stu1.setAge(23); Student stu2 = new Student(); stu2.setName("老李"); stu2.setAge(23); //关联 grade.getStudents().add(stu); grade.getStudents().add(stu1); grade.getStudents().add(stu2); //保存数据的顺序是根据外键的配置来决定的 //如果外键不能为null,那么先保存一的一端 //如果外键可以为null,则可以随意保存 session.save(grade); session.save(stu); session.save(stu1); session.save(stu2);
tx.commit();
}catch (HibernateException e) { if(tx!=null) tx.rollback(); e.printStackTrace(); throw e; }finally{ HibernateUtil.closeSession(); } } @Test publicvoid testGet(){ Session session = null; Transaction tx = null; try{ session = HibernateUtil.getSession(); tx = session.beginTransaction(); //取数据 Grade grade = (Grade)session.get(Grade.class, 1); System.out.println("gradeName="+grade.getName()); System.out.println("grade所对应的多的一端的数据"); Map<String,Student> map = grade.getStudents(); System.out.println(map.get("老王").getAge()); tx.commit(); }catch (HibernateException e) { if(tx!=null) tx.rollback(); e.printStackTrace(); throw e; }finally{ HibernateUtil.closeSession(); } } |