- 浏览: 1990118 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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文件
以下是说明,1对多 单向外键关联 的实例.同样以person 和 address 为例.
为了方便测试,在原有的Hibernate框架上面,建立两个hbm.xml文件..
一个是Address_One_to_Many.hbm.xml,另外一个是Person_One_to_Many.hbm.xml。
然后,建立两个JavaBean 分别是:Address_One_to_Many 和 Person_One_to_Many
Person_One_to_Many具体内容如下:
/** * 1对多,单向关联 * @author Administrator * */ public class Person_One_to_Many implements Serializable{ private static final long serialVersionUID = -6313867775683964530L; private Integer id; private String name; private Integer age; //一个人,有多个地址; private Set<Address_One_to_Many> setAddress = new HashSet<Address_One_to_Many>(); //getter 和 setter 方法省略 }
Address_One_to_Many 具体代码如下:
/** * * 一对多的关系; * @author Administrator * */ public class Address_One_to_Many implements Serializable{ private static final long serialVersionUID = 3635140598485086087L; private Integer addressID; private String addressDetail; //getter 和 setter方法省略. }
接下来就是配置Mapping映射文档.
Person_One_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 package="pack.java.model"> <class name="Person_One_to_Many" table="ZHT_Person_One_To_Many"> <id name="id" column="ID" type="java.lang.Integer"> <!-- mySql中主键id自动生成. --> <generator class="identity"> </generator> </id> <!-- PERSON_ONE_TO_MANY属性的定义 --> <property name="name" column="NAME" type="java.lang.String"></property> <property name="age" column="AGE" type="java.lang.Integer"></property> <!-- 设置Address地址set集合,inverse = false代表主控制端; lazy=false代表不延迟加载. table=ADDRESS_ONE_TO_MANY 指定数据库的ADDRESSS一张表;方便关联查询; cascade=all 支持所有的级联操作; --> <set name="setAddress" inverse="false" lazy="false" table="ADDRESS_ONE_TO_MANY" cascade="all"> <!-- 确定关联的外键列,可以任意取个名字;--> <key column="id" not-null="false"></key> <!-- 1个人多对应多个地址,所以class指向的是Address --> <one-to-many class="Address_One_to_Many"/> </set> </class> </hibernate-mapping>
Address_One_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 package="pack.java.model"> <class name="Address_One_to_Many" table="ADDRESS_ONE_TO_MANY"> <id column="ADDRESS_ID" name="addressID" type="java.lang.Integer"> <generator class="identity"/> </id> <!-- ADDRESS_ONE_TO_MANY属性的定义; --> <property lazy="false" name="addressDetail" column="ADDRESS_DETAIL" not-null="true"/> </class> </hibernate-mapping>
配置完之后,记得在Hibernate.cfg.xml中加上 刚才新建xxx.hbm.xml文件的映射地址:
比如:
<mapping resource="pack/java/model/Address_One_to_Many.hbm.xml"/>
<mapping resource="pack/java/model/Person_One_to_Many.hbm.xml"/>
最后,在建立一个Test类进行测试刚刚配置的1对多的映射关系.
package pack.java.test; import java.io.Serializable; import java.util.Set; import org.hibernate.Session; import pack.java.hibernate.HibernateSessionFactory; import pack.java.model.Address_One_to_Many; import pack.java.model.Person_One_to_Many; /** * * Hibernate 测试类; 一对多外键单向关联; * @author ZhouHaiTao * */ public class HibernateDemoOneToMany { public static void main(String[] args) { HibernateDemoOneToMany hibernateDemoOneToMany = new HibernateDemoOneToMany(); //保存地址; hibernateDemoOneToMany.saveAddress(); //保存人物; hibernateDemoOneToMany.savePerson(); //根据Person id查询person; hibernateDemoOneToMany.loadPersonByID(1); } /** * 保存Address地址; */ private void saveAddress(){ Session session = getSession(); Address_One_to_Many address1 = new Address_One_to_Many(); address1.setAddressDetail("湖南省株洲市"); Address_One_to_Many address2 = new Address_One_to_Many(); address2.setAddressDetail("广东省深圳市"); Address_One_to_Many address3 = new Address_One_to_Many(); address3.setAddressDetail("湖北省武汉市"); //开始事务; session.beginTransaction().begin(); //单独保存地址; session.save(address1); session.save(address2); session.save(address3); //提交事务; session.beginTransaction().commit(); //关闭session; closeSession(session); } /** * 保存Person,并且给Person指定多个地址; */ private void savePerson(){ //获取session; Session session = getSession(); Person_One_to_Many person1 = new Person_One_to_Many("李四",23); Person_One_to_Many person2 = new Person_One_to_Many("张三",23); Address_One_to_Many address1 = new Address_One_to_Many(); address1.setAddressDetail("湖南省株洲市"); Address_One_to_Many address2 = new Address_One_to_Many(); address2.setAddressDetail("广东省深圳市"); Address_One_to_Many address3 = new Address_One_to_Many(); address3.setAddressDetail("湖北省武汉市"); session.beginTransaction().begin(); //给添加person1对象添加两个地址; person1.getSetAddress().add(address1); person1.getSetAddress().add(address2); //给person2对象,添加一个地址; person2.getSetAddress().add(address3); session.save(person1); session.save(person2); session.beginTransaction().commit(); //关闭session; closeSession(session); } /** * 根据person id查询出,person对象,以及地址; * @param id */ private void loadPersonByID(Serializable id){ Session session = getSession(); Person_One_to_Many personOneToMany = (Person_One_to_Many) session.load(Person_One_to_Many.class, id); System.out.println("打印出Person中的属性信息:"); System.out.println(personOneToMany.getId()+","+personOneToMany.getName()+","+personOneToMany.getAge()); Set<Address_One_to_Many> addressOneToManies = personOneToMany.getSetAddress(); System.out.println("\n打印出Address中的信息:"); for(Address_One_to_Many addressOneToMany : addressOneToManies){ System.out.println(addressOneToMany.getAddressID()+","+addressOneToMany.getAddressDetail()); } closeSession(session); } /** * 创建session; * @return */ private static Session getSession(){ return HibernateSessionFactory.getSession(); } /** * 创建session; * @return */ private static void closeSession(Session session){ session.close(); } }
测试之后,可以在MySql中查看数据数据是否正常插入成功..
以下是控制台输出的信息,代表成功插入数据库:
打印出Person中的属性信息:
1,周海涛,23
打印出Address中的信息:
5,湖南省株洲市
4,广东省深圳市
发表评论
-
大型互联网服务集成平台: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 1257我们知道 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 1030Hibernate缓存分类: Session ... -
在Hibernate中使用日期函数获取数据库时间
2011-10-04 20:13 1672在Hibernate中使用日期函数获取数据库时间 ... -
Hibernate关联映射-one to one主键双向关联
2011-09-23 01:11 1316这次,继续上一次的实例。 记录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 many 外键单向关联.
2011-09-20 01:18 1452多对多的实例很多,这里说一个比较简单的例子,而且还是单向 ... -
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 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 <many-to-one name="idCard" column="card_id...
关联映射主要包括四种类型:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)。下面我们将逐一探讨这些关联映射的配置方法。 1. **一对一关联映射** - **主键关联**...
接下来是“多对一”(Many-to-One)映射,与一对多相反,一个子实体可以关联到多个父实体。例如,多个订单可以属于同一个客户。`hibernate_many2one`的案例可能展示了如何在子类中使用`@ManyToOne`注解来指定与父类...
在 Hibernate 映射中,需要使用 `one-to-one` 元素,并设置 `constrained="true"`,表明该类的主键由关联类生成。 3. Hibernate 一对一连接表单向关联: 这种关联方式是通过额外的连接表来实现一对一关系的。连接...
本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...
2. **一对多关联**(One-to-Many / Many-to-One) - 外键单向关联 - 连接表单向关联 - 外键双向关联 - 连接表双向关联 3. **多对多关联**(Many-to-Many) - 单向关联 - 双向关联 每种关联类型都有其特定的...
这里的`many-to-one`元素表示Address与Person的一对多关联,column属性指定了外键列的名称,class属性指定了Person实体的全限定类名,cascade属性可以指定级联操作。 在实际使用中,可以通过Hibernate的Session接口...
-- 用来映射关联PO,必须为one-to-one元素增加constrained="true"属性 --> <one-to-one name="address" constrained="true"/> </hibernate-mapping> ``` --- ##### 3. 一对一连接表单向关联 在一对一连接表单...
【标题】"hibernate-one-to-many-uni" 指的是在Hibernate框架下实现的一对多单向关联关系。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。在这个...
在Person类中添加`private Address address`属性,并在`person.hbm.xml`中配置`<many-to-one>`元素,如`<many-to-one name="address" cascade="all" class="Address" column="address_id"/>`。这表示Person表中的...
- 多方配置文件中添加`<many-to-one>`标签,表示多方与一方之间的关联。 ```xml <many-to-one name="一方对象作为属性的名称" class="一方类包括了路径的" column="一方主键id" not-null="true"/> ``` 3. **...
`<key>`元素定义了外键列名,`<one-to-many>`元素指定被关联的实体类。 三、实体类定义 在Department实体类中,需要有一个类型为Set的属性,对应映射文件中的`<set>`元素。 ```java public class Department { //...
3. **映射文件**:如果使用传统的Hibernate XML映射文件,需要在`.hbm.xml`文件中配置多对一关联,设置`<many-to-one>`标签。如果是注解方式,直接在Java类中使用上述提到的注解。 4. **数据访问对象(DAO)**:...
<many-to-one name="address" class="Address" column="address_id"/> ``` - **基于PK**:同样只有一方包含了另一方的引用关联实体属性,但这里通过使用外键作为主键的一部分来实现。 - **映射示例**: ```xml ...
3. **第三种方式**:这是对唯一外键关联的一种变体,两个实体都包含对方的外键字段,但在配置文件中使用`<many-to-one>`标签,模拟一对一关联。 **二、一对多、多对一关联** 在选课系统中,一个教师可以教多个课程...
这里的`many-to-one`元素定义了多对一的关系。`name`属性指定了在员工类中对应的属性名(这里是`department`),`class`属性是部门实体的全限定类名,`column`属性是数据库表中对应的外键列名(假设为`dept_id`)。 ...
- 在多方的映射文件中,通过 `<many-to-one>` 标签定义一个引用,指定关联的列和被引用的实体类。例如,学生(Student)可以引用班级(Classes)。 3. **一对一关系**: - **外键关联**: - **单向**:在维护...
在Hibernate映射文件中,通过`<many-to-one>`标签将User类的group属性映射到t_user表的gid外键。 - 反之,如果一个User属于一个Group(一对多),则在Group类中添加一个User的集合。映射文件中,使用`<set>`标签...