- 浏览: 36941 次
- 性别:
文章分类
最新评论
-
开源人:
...
简约之美,JQuery之进度条插件 -
zhubo123:
楼主. 有个问题想请教你.我试着做了一遍. 可是为什么setP ...
JAVA文件上传(带进度条)
一、模型介绍
|
|
多个人(Person)对应一个地址(Address)。
|
|
二、实体(省略getter、setter方法)
|
|
public class Personn1tab {
|
private int personid;
|
private String name;
|
private int age;
|
private Addressn1tab addressn1tab;
|
|
public class Addressn1tab {
|
private int addressid;
|
private String addressdetail;
|
|
三、表模型
|
|
mysql> desc address_n1tab;
|
+---------------+--------------+------+-----+---------+----------------+
|
| Field | Type | Null | Key | Default | Extra |
|
+---------------+--------------+------+-----+---------+----------------+
|
| addressid | int(11) | NO | PRI | NULL | auto_increment |
|
| addressdetail | varchar(255) | YES | | NULL | |
|
+---------------+--------------+------+-----+---------+----------------+
|
|
mysql> desc join_n1tab;
|
+------------+---------+------+-----+---------+-------+
|
| Field | Type | Null | Key | Default | Extra |
|
+------------+---------+------+-----+---------+-------+
|
| personid | int(11) | NO | PRI | | |
|
| addressn1tab | int(11) | YES | MUL | NULL | |
|
+------------+---------+------+-----+---------+-------+
|
|
mysql> desc person_n1tab;
|
+----------+--------------+------+-----+---------+----------------+
|
| Field | Type | Null | Key | Default | Extra |
|
+----------+--------------+------+-----+---------+----------------+
|
| personid | int(11) | NO | PRI | NULL | auto_increment |
|
| name | varchar(255) | YES | | NULL | |
|
| age | int(11) | YES | | NULL | |
|
+----------+--------------+------+-----+---------+----------------+
|
|
四、生成的SQL脚本
|
|
CREATE TABLE `address_n1tab` (
|
`addressid` int(11) NOT NULL auto_increment,
|
`addressdetail` varchar(255) default NULL,
|
PRIMARY KEY (`addressid`)
|
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;
|
|
CREATE TABLE `join_n1tab` (
|
`personid` int(11) NOT NULL,
|
`address11fk` int(11) default NULL,
|
PRIMARY KEY (`personid`),
|
KEY `FKAC780AAADAE3A82C` (`personid`),
|
KEY `FKAC780AAAC6242A64` (`address11fk`),
|
CONSTRAINT `FKAC780AAAC6242A64` FOREIGN KEY (`address11fk`) REFERENCES `address_n1tab` (`addressid`),
|
CONSTRAINT `FKAC780AAADAE3A82C` FOREIGN KEY (`personid`) REFERENCES `person_n1tab` (`personid`)
|
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
|
|
CREATE TABLE `person_n1tab` (
|
`personid` int(11) NOT NULL auto_increment,
|
`name` varchar(255) default NULL,
|
`age` int(11) default NULL,
|
PRIMARY KEY (`personid`)
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk;
|
|
|
五、映射方法
|
|
<hibernate-mapping>
|
<class name="com.lavasoft.dx._n_1_tab.Personn1tab" table="PERSON_n1tab">
|
<id name="personid">
|
<generator class="identity"/>
|
</id>
|
<property name="name"/>
|
<property name="age"/>
|
<!--使用join元素显式确定链接表-->
|
<join table="join_n1tab">
|
<!--映射关联所用的外键-->
|
<key column="personid"/>
|
<many-to-one name="addressn1tab"/>
|
</join>
|
</class>
|
</hibernate-mapping>
|
|
<hibernate-mapping>
|
<class name="com.lavasoft.dx._n_1_tab.Addressn1tab" table="ADDRESS_n1tab">
|
<id name="addressid">
|
<generator class="identity"/>
|
</id>
|
<property name="addressdetail"/>
|
</class>
|
</hibernate-mapping>
|
|
|
六、测试方法
|
|
public class Test_n1tab {
|
public static void main(String[] args){
|
Personn1tab p1=new Personn1tab();
|
Personn1tab p2=new Personn1tab();
|
|
p1.setAge(21);
|
p1.setName("p1");
|
|
p2.setAge(23);
|
p2.setName("p2");
|
|
Addressn1tab add=new Addressn1tab();
|
add.setAddressdetail("郑州市经三路");
|
|
p1.setAddressn1tab(add);
|
p2.setAddressn1tab(add);
|
|
Session session=HibernateUtil.getCurrentSession();
|
Transaction tx=session.beginTransaction();
|
session.save(add);
|
session.save(p1);
|
session.save(p2);
|
tx.commit();
|
HibernateUtil.closeSession();
|
}
|
}
|
|
七、测试结果
|
|
1) :正常保存. 推荐这么干!
|
|
session.save(p1);
|
session.save(p2);
|
|
Hibernate: insert into ADDRESS_n1tab (addressdetail) values (?)
|
Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)
|
Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)
|
Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)
|
Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)
|
|
2) :正常保存.
|
session.save(p1);
|
session.save(p2);
|
session.save(add);
|
|
Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)
|
Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)
|
Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)
|
Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)
|
发表评论
-
Hibernate 多对多双向关联
2012-01-30 16:06 639一、模型介绍 多个人( ... -
Hibernate 一对多连接表双向关联
2012-01-30 16:06 602一、模型介绍 一个人( ... -
Hibernate 一对多外键双向关联
2012-01-30 16:08 642一、模型介绍 一个人( ... -
Hibernate 一对一连接表双向关联
2012-01-30 16:08 704一、模型介绍 一个人( ... -
Hibernate 一对一主键双向关联
2012-02-09 11:09 758一对一主键映射在一对一映射中还算是最为常用的。 一、模 ... -
Hibernate 一对一外键双向关联
2012-01-07 09:26 668一对一外键关联是一对多外键关联的特例,只是在多的一方加了 ... -
Hibernate 多对多单向关联
2012-01-07 08:52 625一、模型介绍 多个人(P ... -
Hibernate 多对一外键单向关联
2012-01-07 08:52 645一、模型介绍 多个人( ... -
Hibernate 一对多连接表单向关联
2012-01-07 08:52 802一、模型介绍 一个人( ... -
Hibernate 一对多外键单向关联
2012-01-06 15:16 731这种情况很少见, ... -
Hibernate 一对一连接表单向关联
2012-01-06 15:14 633这种情况很少见,但Hibernate同样允许采用 ... -
Hibernate 一对一主键单向关联
2012-01-06 15:12 6991-1的关联可以基于主键关联,但基于主键关联的持久化 ... -
Hibernate 一对一外键单向关联
2012-01-06 15:08 636事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特 ...
相关推荐
7. Hibernate 多对一连接表单向关联: 这种关联同样需要连接表,连接表中的外键分别引用多的一方和一的一方。配置上,需要创建连接表实体并使用 `many-to-one` 元素。 8. Hibernate 多对多单向关联: 多对多关联...
本知识点将深入讲解Hibernate中的一对一(OneToOne)连接,特别是单向关联的实现。 在数据库设计中,一对一关联是指两个实体之间存在唯一对应的关系,例如一个人可能只有一个身份证,或者一个账户只有一个用户信息...
本文旨在深入探讨Hibernate中的实体关联关系映射技术,主要包括一对一、一对多、多对多等不同类型的关联关系及其在实际开发中的应用技巧。通过本文的学习,开发者可以更好地理解和掌握Hibernate框架下的实体关联关系...
以上介绍的是 Hibernate 中一对一关联关系的三种不同方式,包括一对一连接表单向关联、一对一主键单向关联和一对一外键单向关联。每种关联方式都有其特定的应用场景,选择合适的关联方式对于提高应用程序的性能和可...
在多对一连接表单向关联中,多个实体(子实体)与一个实体(父实体)相关联,这种关联通过第三个表(连接表或关联表)来实现。 **表结构示例**: - **Department表**: - `departmentid`: 主键 - `departmentName`...
在IT行业中,开发Web应用程序时,常常需要处理复杂的对象关系,比如一对一、一对多、多对多等。这里我们关注的是“一对多”关系的实现,以“hibernate+struts”框架为例,结合MySQL数据库,来创建一个学生对班级的增...
这包括一对一、一对多、多对一和多对多四种关联类型。例如,一个用户可以有多个订单,这是一种一对多的关系;反之,每个订单对应一个用户,这是一种多对一的关系。实现数据关联通常通过配置XML映射文件或使用注解来...
#### 2.1.7 多对一连接表单向关联 与上述相同,但通过连接表进行关联。 #### 2.1.8 多对多单向关联 多个实体可以关联到多个其他实体,这通常涉及一个中间表。`<many-to-many>`标签用于此目的。 ```xml ``` ##...
类之间的关系通过配置文件中的映射元素(如many-to-one、one-to-many、many-to-many)来定义,如一对一、一对多、多对多的关系映射。 Hibernate还提供了缓存机制,包括一级缓存(SessionFactory级别的缓存,每个...
Hibernate通过配置文件支持一对一、一对多、多对一和多对多的关系映射。 **缓存机制**: - **一级缓存**:内部缓存,每个Session有自己的缓存,生命周期与Session相同。 - **二级缓存**:可选的全局缓存,支持应用...
- **一到多/多对一**:解释了一到多和多对一双向关联的处理方式。 - **一对一**:进一步探讨了一对一的双向关联。 - **使用联接表双向关联**:讨论了使用中间表来映射双向关联。 - **一到多/多对一**:进一步讨论了...
3. **避免不必要的一对一关联**:多对一通常更为高效。 4. **对象缓存策略**:避免使用集合缓存,提高性能。 5. **集合类型选择**:Bag用于一对多,Set用于多对多,以确保无重复。 6. **显式多态**:在继承类中使用...
Struts是MVC(模型-视图-控制器)设计模式的一个实现,主要用于控制应用程序的流程,而Hibernate则是一个对象关系映射(ORM)工具,用于简化数据库操作。在这个"简单Struts+Hibernate实例"中,我们将深入探讨这两个...
在Struts2中,Action返回的结果通常会与一个JSP页面关联,通过Struts2标签库(如s:form、s:textfield等)来渲染表单和显示数据。 总的来说,这个小案例是一个很好的实战练习,涵盖了JavaEE开发中的重要组成部分,...
- 用多对一替换一对一,减少数据库表的冗余。 - 配置对象缓存,避免集合缓存带来的性能问题。 - 使用Bag(无序集合)处理一对多,Set(唯一元素集合)处理多对多。 - 显式使用多态处理继承关系。 - 减少表字段数量,...
【购物车实例(Struts+Hibernate)】是一个典型的Web应用开发案例,主要针对那些刚开始学习Struts和Hibernate框架的开发者。这个实例通过实现一个在线购物车的功能,帮助开发者理解这两个框架如何协同工作来构建实际...
首先,Hibernate作为一款对象关系映射(ORM)框架,它消除了Java程序与数据库之间的直接交互,将数据库操作转化为对Java对象的操作。通过配置文件和注解,Hibernate可以自动管理数据库连接、SQL语句的生成以及对象的...
- **整合方式**:通常使用ActionForm对象接收表单数据,然后在Action中创建Hibernate Session,通过SessionFactory获取,执行数据操作后,将结果传递给视图层。 - **配置**:需要在struts-config.xml中配置Action...
3. 不使用一对一关联,用多对一代替。 4. 配置对象缓存,避免使用集合缓存。 5. 一对多集合使用 Bag,多对多集合使用 Set。 6. 继承类使用显式多态。 7. 表字段要少,通过表关联实现复杂查询,依赖于二级缓存。 ###...