一对多分为单向一对多和双向一对多。
从图中我们可以看到2个表之间的关系:customer 和 contact 是一对多的关系。1个customer 可能有多个contact。主控方为customer。
先来看配置文件:customer.hbm.xml
字段的映射就不说,忽略。看主要的
java 代码
- "contacts" inverse="true">
- "CUSTOMERID"/>
- class="com.zhkchi.hibernate.Contact"/>
-
name是指你在主控方customer class文件中建的一个set 字段的名字
key 是指被控方的外键,等会看hibernate生成的语句就清楚了 one-to-many指明了这个是一对多,class是指多的一方的类
这里,我们只是单向一对多关联,所以多方我们不需要配置什么特别的东西,只是最简单的字段映射就可以了。
下面来看代码:
java 代码
- Criteria criteria = session.createCriteria(Customer.class);
- criteria.add(Expression.eq("customerid", new Integer(101)));
- List list = criteria.list();
- if(list != null && list.size() > 0){
- for(int i = 0;i< list.size();i++){
- Customer customer = (Customer) list.get(i);
- System.out.println(customer.getCustomerid() + customer.getName());
- if(customer.getContacts() != null){
- System.out.println(customer.getContacts().size());
- }
- }
- }
hibernate生成的语句如下:
java 代码
- Hibernate: select this_.CUSTOMERID as CUSTOMERID0_0_, this_.NAME as NAME0_0_ from customer this_ whe
- re this_.CUSTOMERID=?
- 101RICKY
- Hibernate: select contacts0_.CUSTOMERID as CUSTOMERID1_, contacts0_.CONTACTID as CONTACTID1_, contac
- ts0_.CONTACTID as CONTACTID1_0_, contacts0_.ADDRESS as ADDRESS1_0_, contacts0_.CITY as CITY1_0_, con
- tacts0_.CUSTOMERID as CUSTOMERID1_0_, contacts0_.PHONE as PHONE1_0_ from contact contacts0_ where co
- ntacts0_.CUSTOMERID=?
- 2
我们从sql语句的生成中可以发现2点有用的东西:
1. 我们在输出 id 和name的时候,hibernate并没有一起把contact里面的东西一起查询出来,而是等到我们查看contact的个数才执行查询的。这个和默认的 延迟加载是吻合的。
2. 刚刚前面提到的,在主动方,set集合中,key的配置,column为多方的外键,对应着最后的 where contacts0_.customerid = ?
不过有一点我还不太明白,这里我用的是java.util.set集合,如果换成list改如何?
分享到:
相关推荐
公司法务实习日记随记三篇.pdf
会计专业毕业实习日记随记篇.pdf
小学三年级秋游日记随记五篇.pdf
这篇随记将探讨哈希函数的基本概念、性质以及在实际应用中的重要性。 哈希函数,也称为散列函数,是一种特殊的算法,它将任意长度的输入(也称为预映射或消息)转化为固定长度的输出,这个输出通常被称为哈希值或...
- **细节添加**:通过添加更多的沙子来完善细节,如狮身人面像的鼻子、眼睛等。 - **修饰润色**:对沙雕进行最后的修饰,使其更加精致。 #### 3. **沙雕制作技巧** - **水分控制**:保持沙子的适当湿度对于塑造...
【压缩包子文件的文件名称列表】:随记.docx 指出文档的具体形式,是一个Microsoft Word文档,通常用于撰写报告、笔记或文章,其中的“随记”与标题相呼应,暗示这可能是一篇个人的电气知识总结。 接下来,我们将...
### C++ 随记知识点总结 #### 一、内存管理与 new/delete 操作符 在 C++ 中,`new` 和 `delete` 是用于动态内存分配的关键字。`new` 用于在堆区分配内存,`delete` 用于释放之前通过 `new` 分配的内存。使用 `new`...
互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf互联网公司实习日记随记参考.pdf
linux net 管理随记,留着个人备忘
如果文件内容确实如描述中所示,全为“活动随记一次‘出色’的朗诵会.pdf”和一些不明确的符号,那么我将无法从空白或无关的信息中提取知识点。请提供实际的文字内容,以便我进行分析并创作出丰富的内容。
git随记 git
总的来说,JSP PDF打印和复杂模板设计是一项涉及多方面技术的任务,需要对Java、JSP、iText以及PDF规范有深入理解。通过熟练掌握这些工具和技术,我们可以创建出美观且功能强大的PDF文档,满足各种业务需求。
随记App是一款集成微博与博客功能的毕业设计项目,旨在为用户提供一个统一的平台来管理和分享他们的日常思考和生活点滴。这个项目分为客户端和服务端两部分,分别实现了用户交互界面和后台数据处理。 在Android...
一个应用程序可以有多个缓存管理器,但通常推荐使用单例模式。 3. **缓存(Cache)**:缓存管理器下的一组配置好的缓存,每个缓存有自己的命名空间,用于区分不同的数据集。 4. **缓存元素(Cache Entry)**:缓存...
面试随记???随时更新
计算机网络原理随记 在本资源中,我们将讨论计算机网络的基本概念、发展历程、网络架构、协议栈、数据传输、网络互通、安全性等方面的知识点。 计算机网络的基本概念 计算机网络是指将多个计算机设备连接起来,以...
这篇随记内容涵盖了多个教育和德育相关的知识点,深入探讨了教育的本质、电子智慧教育的定义、学生文化的理解以及班主任的角色。以下是对这些知识点的详细解释: 1. **教育理念**: - "精准,精减,精彩":这强调...
重点小学生寒假记随记大全.doc
C#是一种由微软开发的面向对象的编程语言,它结合了C++的高效性和Java的简洁性,被誉为最优秀的编程语言之一。C#是专为.NET框架设计的,因此在.NET环境中具有极高的兼容性和可操作性。.NET Framework包含了公共语言...