基于List集合映射

本文主要探讨了Java编程中如何进行List集合到其他数据结构的映射操作,包括映射文件的配置和具体的测试代码示例,帮助读者理解这一常见但重要的数据处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 实体类中使用 List 集合

 

1 public class Grade {
2     private int id;
3     private String name;
4     private List<Student> students = new ArrayList<Student>(0);
5 }

 

2、 映射文件

 1 <hibernate-mapping package="cn.siggy.pojo">
 2     <class name="Grade">
 3         <id name="id">
 4             <generator class="native"></generator>
 5         </id>
 6         <property name="name"/>
 7         <list name="students" cascade="all">
 8             <!-- key表示外键  column外键列名-->
 9             <key column="grade_id"></key>
10             <!-- 在多的一端 产生一列 用来表示顺序 如果不指明列名 默认为 idx 
11                 值由hibernate来维护
12              -->
13             <list-index column="sort">
14             </list-index>
15             <!-- one-to-many 一对多  类Grade 中  students 所表示类型 -->
16             <one-to-many class="Student"/>
17         </list>
18     </class>

3、 测试代码

 1 @Test
 2     public void testSave() throws HibernateException, SerialException, SQLException{
 3         Configuration cfg = new Configuration().configure();
 4         SessionFactory factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
 5         .applySettings(cfg.getProperties()).build());
 6         Session session = null;
 7         Transaction tx = null;
 8         try{
 9             session = factory.openSession();
10             tx = session.beginTransaction();
11             Grade grade = new Grade();
12             grade.setName("基础");
13             
14             Student stu = new Student();
15             stu.setName("张三疯");
16             stu.setAge(22);
17             Student stu1 = new Student();
18             stu1.setName("老王");
19             stu1.setAge(23);
20             Student stu2 = new Student();
21             stu2.setName("老李");
22             stu2.setAge(23);
23             //关联
24             grade.getStudents().add(stu);
25             grade.getStudents().add(stu1);
26             grade.getStudents().add(stu2);
27             //保存数据的顺序 是根据外键的配置来决定的
28             //如果外键不能为null,那么先保存一的一端
29             //如果外键可以为null,则可以随意保存
30             session.save(grade);
31             session.save(stu);
32             session.save(stu1);
33             session.save(stu2);
34             
35             tx.commit();
36             
37         }catch (HibernateException e) {
38             if(tx!=null)
39                 tx.rollback();
40             e.printStackTrace();
41             throw e;
42         }finally{
43             HibernateUtil.closeSession();
44         }
45     }
46     @Test
47     public void testGet(){
48         Session session = null;
49         Transaction tx = null;
50         try{
51             session = HibernateUtil.getSession();
52             tx = session.beginTransaction();
53             //取数据
54             Grade grade = (Grade)session.get(Grade.class, 1);
55             System.out.println("gradeName="+grade.getName());
56             System.out.println("grade所对应的多的一端的数据");
57             List<Student> list = grade.getStudents();
58             for(Student stu:list){
59                 System.out.println(stu.getName());
60             }
61             tx.commit();
62         }catch (HibernateException e) {
63             if(tx!=null)
64                 tx.rollback();
65             e.printStackTrace();
66             throw e;
67         }finally{
68             HibernateUtil.closeSession();
69         }
70     }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值