- 浏览: 1990140 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (509)
- JavaEE (122)
- Oracle数据库 (29)
- JavaScript (37)
- SAP (5)
- MySql数据库 (7)
- JavaSE (4)
- Ajax (1)
- jQuery (13)
- SSH框架 (36)
- Web Service (10)
- JSF框架 (2)
- JBPM (0)
- ireport报表 (2)
- ibatis (5)
- Hibernate (31)
- JSP (11)
- Tomcat 服务器 (20)
- Other (19)
- JavaWeb (4)
- Maven (11)
- OSWorkFlow (10)
- HTML (13)
- Exception汇总 (7)
- SVN (2)
- 笑话 (1)
- JSTL (1)
- WebSphere Message Broker (13)
- ANT命令 (3)
- Liunx (12)
- Struts2 (26)
- Eclipse (6)
- DOS (3)
- Flex (11)
- WebSphere (1)
- 开发常用工具 (3)
- Junit (2)
- EJB (4)
- Struts1.2 (2)
- Jboss (1)
- Android (2)
- Java框架源码解析 (1)
- Spring (4)
- MyBatis (6)
- SpringMVC (4)
- Jetty (2)
- 数据库表设计 (1)
- SSO (4)
最新评论
-
贝塔ZQ:
也可以试试PageOffice插件,觉得更简单点
Jxl操作Excel设置背景、字体颜色、对齐方式、列的宽度 -
jia1208:
...
Could not publish server configuration for Tomcat v6.0 Server at localhost. -
u011274527:
赞
java.io.EOFException java.io.ObjectInputStream$PeekInputStream.readFully 错误 -
旭旭小牛啦:
怎么没哟了,继续赛
jQuery 选择器 -
wzw3919:
100行会报空指针
Java 解压缩zip文件
多对多的实例很多,这里说一个比较简单的例子,而且还是单向引用.. 比如说一个人可以对应多个地址,一个地址可以被多个人所拥有..
这就是对多多的关联关系,
在做多对多的关联的时候,一定要注意,别遗漏 中间表的配置。
下面是Pojo的类:
Person_FK_Many_to_Many:
public class Person_FK_Many_to_Many implements Serializable{ private static final long serialVersionUID = -7132895885951796381L; private Integer id; private String name; private Integer age; private Set<Address_FK_Many_to_Many> addressFKManyToManieSet = new HashSet<Address_FK_Many_to_Many>(); //getter 和setter方法省略; }
Address_FK_Many_to_Many:
public class Address_FK_Many_to_Many { private Integer addressID; private String addressDetail; //getter和setter方法省略; }
下面是Hibernate配置代码:
Person_FK_Many_to_Many.hbm.xml:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="pack.java.model.Person_FK_Many_to_Many" table="ZHT_PERSON_FK_MANY_TO_MANY"> <id name="id"> <generator class="identity"/> </id> <property name="name" column="NAME"></property> <property name="age" column="AGE"></property> <!-- ZHT_PERSON_ADDRESS_MANY_TO_MANY 这个set中的table,是指映射到数据库中的中间表; 用来存储personID 和 AddressID。 --> <set name="addressFKManyToManieSet" lazy="false" table="ZHT_PERSON_ADDRESS_MANY_TO_MANY" inverse="false" cascade="all"> <key column="id" not-null="false" ></key> <many-to-many column="addressID" class="pack.java.model.Address_FK_Many_to_Many"> </many-to-many> </set> </class> </hibernate-mapping>
Address_FK_Many_to_Many.hbm.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="pack.java.model.Address_FK_Many_to_Many" table="ZHT_ADDRESS_FK_MANY_TO_MANY"> <id name="addressID"> <generator class="identity"></generator> </id> <property name="addressDetail" column="addressDetail"></property> </class> </hibernate-mapping>
然后再Hibernate.cfg.xml中,把刚刚建立的两个*.hbm.xml文件。
<mapping resource="pack/java/model/Address_FK_Many_to_Many.hbm.xml"/>
<mapping resource="pack/java/model/Person_FK_Many_to_Many.hbm.xml"/>
最后,就写一个测试类,来测试刚刚配置的单向多对多的关联关系.
package pack.java.test; import java.util.List; import java.util.Set; import org.hibernate.Query; import org.hibernate.Session; import pack.java.hibernate.HibernateSessionFactory; import pack.java.model.Address_FK_Many_to_Many; import pack.java.model.Person_FK_Many_to_Many; /** * 一个人可以对应多个地址,一个地址,也可以对应多个人。 * @author Administrator * */ public class HibernateDemoManyToMany { private Session getSession(){ Session session = HibernateSessionFactory.getSession(); return session; } public static void main(String[] args) { HibernateDemoManyToMany demoManyToMany = new HibernateDemoManyToMany(); Session session = demoManyToMany.getSession(); //保存; demoManyToMany.savePerson(session); //查询; demoManyToMany.queryPerson(session); } private void queryPerson(Session session){ //Person_FK_Many_to_Many personFKManyToMany = (Person_FK_Many_to_Many) session.load(Person_FK_Many_to_Many.class, 1); String hql = "select p from Person_FK_Many_to_Many p"; Query query = session.createQuery(hql); List<Person_FK_Many_to_Many> list = query.list(); for(Person_FK_Many_to_Many personFKManyToMany:list){ System.out.println(personFKManyToMany.getId()+","+personFKManyToMany.getName()+","+personFKManyToMany.getAge()); Set<Address_FK_Many_to_Many> addressFKManyToManies = personFKManyToMany.getAddressFKManyToManieSet(); for (Address_FK_Many_to_Many addressFKManyToMany : addressFKManyToManies) { System.out.println(addressFKManyToMany.getAddressID()+","+addressFKManyToMany.getAddressDetail()); } } session.close(); System.out.println(list.get(0).getAddressFKManyToManieSet().size()); } private void savePerson(Session session){ Person_FK_Many_to_Many fkManyToMany1 = new Person_FK_Many_to_Many(); fkManyToMany1.setAge(22); fkManyToMany1.setName("ZhouHaiTao"); Person_FK_Many_to_Many fkManyToMany2 = new Person_FK_Many_to_Many(); fkManyToMany2.setAge(23); fkManyToMany2.setName("ZhangSan"); Address_FK_Many_to_Many addressFKManyToMany1 = new Address_FK_Many_to_Many(); addressFKManyToMany1.setAddressDetail("北京市朝阳区"); Address_FK_Many_to_Many addressFKManyToMany2 = new Address_FK_Many_to_Many(); addressFKManyToMany2.setAddressDetail("深圳市罗湖区"); Address_FK_Many_to_Many addressFKManyToMany3 = new Address_FK_Many_to_Many(); addressFKManyToMany3.setAddressDetail("长沙市雨花区"); fkManyToMany1.getAddressFKManyToManieSet().add(addressFKManyToMany1); fkManyToMany1.getAddressFKManyToManieSet().add(addressFKManyToMany2); fkManyToMany2.getAddressFKManyToManieSet().add(addressFKManyToMany2); fkManyToMany2.getAddressFKManyToManieSet().add(addressFKManyToMany3); session.beginTransaction().begin(); //保存Peron第一个对象; session.save(fkManyToMany1); //保存Person第二个对象; session.save(fkManyToMany2); session.beginTransaction().commit(); } }
控制输出入如下:
1,ZhouHaiTao,22
1,深圳市罗湖区
2,北京市朝阳区
2,ZhangSan,23
1,深圳市罗湖区
3,长沙市雨花区
发表评论
-
大型互联网服务集成平台:springmvc+mybatis+restfull+JMS+webservice+bootstrap
2015-04-12 23:36 22SpringMVC + Mybatis + SpringS ... -
Spring中二级缓存的配置
2011-12-18 20:40 22331.首先,在spring的hibernate配置里(app ... -
Hibernate 配置文件提示
2011-12-11 16:03 10311.这个则是hibernate.cfg.xml文件的头信息.. ... -
Hibernate中二级缓存的配置
2011-10-18 00:26 1258我们知道 hibernate的session提供了一级缓存, ... -
Hibernate 生成策略属性
2011-10-17 14:01 1014"assigned" 主键由外部程序负责生 ... -
Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/Syn
2011-10-16 18:37 2466Exception in thread "main& ... -
Hibernate缓存的分类
2011-10-16 11:25 1031Hibernate缓存分类: Session ... -
在Hibernate中使用日期函数获取数据库时间
2011-10-04 20:13 1673在Hibernate中使用日期函数获取数据库时间 ... -
Hibernate关联映射-one to one主键双向关联
2011-09-23 01:11 1317这次,继续上一次的实例。 记录1对1 主键双向关联. ... -
Exception in thread "main" org.hibernate.id.IdentifierGenerationException: attem
2011-09-23 00:46 2064今天在做Hibernate中1多1双向关联映射的实例时, ... -
Hibernate关联映射-one to one 外键双向关联.
2011-09-22 00:28 1168说明:双向一对一,是一对多的特例,只需要在多的一方设置成 ... -
Hibernate关联映射-many to one 外键单向关联
2011-09-18 00:25 1957多个人可以对应一个地址,也就是所谓的多对一关系,many to ... -
Hibernate关联映射-one to to 主键单向关联
2011-09-17 23:23 1048这次介绍 还是以Person 和 Address 为例. ... -
Hibernate关联映射-one to many外键单向关联
2011-09-15 01:14 4588以下是说明,1对多 单向外键关联 的实例.同样以person ... -
Hibernate关联映射-one to one单向外键关联
2011-09-13 22:00 1650Hibernate的关联关系很多,也非常的复杂. 常见的有 ... -
org.hibernate.TransientObjectException: object references an unsaved transient i
2011-09-12 19:02 1485org.hibernate.TransientObjectEx ... -
org.hibernate.PropertyAccessException: Exception occurred inside getter of pack.
2011-09-12 18:54 6125报如下,异常是因为,在Person对象中.设置的属性类型 ... -
org.hibernate.MappingException: could not instantiate id generator
2011-09-10 14:32 2475在搭建Hibernate的环境时, ... -
配置hibernate.properties 或 hibernate.cfg.xml 文件时,在配置JDBC连接参数时,要配置数据库方言
2011-09-10 13:04 1931各数据库的方言 (配置 hibernate.cfg.xml 时 ... -
java.sql.SQLException: ORA-01747: user.table.column, table.column 或列说明无效
2011-08-17 11:53 7191今天,使用Hibernate框架,做映射时,添加数据时, ...
相关推荐
在Hibernate中,一对一唯一外键关联映射可以通过 `<many-to-one>` 标签来配置。例如,以下是Person实体与IdCard实体的一对一唯一外键关联映射配置: ```xml <id name="id" column="id" type="java.lang.Integer">...
`hibernate_one2many_1`和`hibernate_one2many_2`的示例可能分别展示了单向和双向的一对多映射。单向映射意味着只有父类知道子类的存在,而双向则允许双方相互引用。在配置中,这通常涉及到`@OneToMany`注解的使用,...
在 Hibernate 中,一对一的外键单向关联意味着一个实体类中的属性指向另一个实体类,而另一个实体类并不知道这个关联。这种关联可以通过在 `many-to-one` 元素中添加 `unique="true"` 属性实现。例如,在 Person 类...
### Hibernate实体关联关系映射详解 #### 一、引言 Hibernate作为一种强大的对象关系映射(Object Relational Mapping,简称ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了持久化层的开发工作,...
关联映射主要包括四种类型:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)。下面我们将逐一探讨这些关联映射的配置方法。 1. **一对一关联映射** - **主键关联**...
本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...
### Hibernate关联映射详解 #### 一、单向多对一映射 在单向多对一的关系中,主要是指“多方”实体依赖于“一方”实体,但是“一方”实体并不感知到“多方”的存在。 1. **数据库设计:**在多方的表中添加与一方...
在一对多外键单向关联中,一个实体(父实体)与多个实体(子实体)相关联,这种关联通过在子实体中添加一个指向父实体的外键来实现。 **表结构示例**: - **Department表**: - `departmentid`: 主键 - `...
在Java持久化框架Hibernate中,一对多外键单向关联是一种常见的关系映射方式,它描述了一对多的关系,其中一个实体(例如Person)可以与多个其他实体(例如Address)相关联,而关联的方向只从多方(Address)指向...
hibernate关联映射是Hibernate框架中的一个重要概念,它用于在Java对象模型和数据库表之间建立关系,使得数据操作更加方便。以下将详细介绍各种类型的关联映射: 1. **单向N-1关联(无连接表)** 在这种关联中,一...
`<key>`元素定义了外键列名,`<one-to-many>`元素指定被关联的实体类。 三、实体类定义 在Department实体类中,需要有一个类型为Set的属性,对应映射文件中的`<set>`元素。 ```java public class Department { //...
3. **映射文件**:如果使用传统的Hibernate XML映射文件,需要在`.hbm.xml`文件中配置多对一关联,设置`<many-to-one>`标签。如果是注解方式,直接在Java类中使用上述提到的注解。 4. **数据访问对象(DAO)**:...
在Java持久化框架Hibernate中,关联关系映射是核心特性之一,它允许对象模型与数据库中的关系模型对应。本文将详细解析三种基本的关联关系:多对一、一对多以及一对一,以及它们在Hibernate中的配置。 1. **多对一...
根据描述,本文将详细介绍Hibernate中的各种映射关系,包括单向和双向的关联,以及不同类型的关联方式如一对一、一对多、多对多等,以帮助初学者更好地理解和应用这些概念。 #### 二、关联映射类型 ##### 2.1 单向...
【hibernate的关联关系映射】在Java持久化框架Hibernate中,关联关系映射是核心功能之一,它允许对象间的复杂关系与数据库中的表结构相匹配。在选课系统这个例子中,主要涉及到的对象包括课题(Course)、教师(Teacher...
和其它许多批注一样,在多对多关联中很多值是自动生成,党双向多对多关联中没有定义任何物理映射时,Hibernate根据以下规则生成相应的值,关联表名:主表表名+下划线+从表表名,关联到主表的外键名:主表名+下划线+...
`<key>`元素指定了`Student`的外键列,`<many-to-many>`元素则指定了`Course`的外键列和关联的实体类。 在`Course`的映射文件中,因为是单向映射,所以不需要额外的配置。不过,如果需要双向映射,`Course`也需要...
6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合...