- 浏览: 89577 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ssy341:
说的简单了点,和官网的文档差不多,多文件上传也不是很好,不过可 ...
jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能 -
蓝凝幽偌:
有没有jar包?
org.apache.commons.net.ftp.FTPClient 的简单用法 -
tinguo002:
在这里缓缓走过,很为楼主钻研精神感动,也感谢楼主分享。
关于Struts2资源文件的配置
Hibernate 多对一连接表单向关联
一、模型介绍
多个人(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 (?, ?)
本文出自 “熔 岩” 博客,转载请与作者联系!
一、模型介绍
多个人(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 (?, ?)
本文出自 “熔 岩” 博客,转载请与作者联系!
发表评论
-
java编程思想final的理解
2015-03-06 13:38 382根据上下文环境,java的关键字final也存在着细微的区别, ... -
PDF2SWF中文字符集解决方案
2014-02-26 15:12 829转自:http://www.cnblogs.com/liver ... -
Runtime.getRuntime().exec() 输出流阻塞的解决方法
2014-02-26 09:40 1880转自:http://blog.csdn.net/xiaoani ... -
笔记(不用老搜索了)
2013-07-17 16:16 0下面代码则执行了subgo()函数, <a href ... -
利用LinkedBlockingQueue实现生产者-消费者模式
2013-06-05 16:09 718由于LinkedBlockingQueue 实现是线程安全的, ... -
加密123
2013-05-08 22:35 865/** * 加密传输时的密码 * @author weirhp ... -
jsoup解析
2013-04-28 15:31 715http://www.ibm.com/developerwor ... -
java线程管理利器:java.util.current的用法举例
2012-12-05 15:42 1010DK5中增加了Doug Lea的并发库,这一引进给java线程 ... -
Tomcat - 解决which must be escaped when used within the value错误
2012-11-19 15:17 657http://www.cnblogs.com/javadu/a ... -
Java POI Word 写文档
2012-11-09 09:19 8761 package apache.poi; 2 3 ... -
使用COS组件实现文件上传
2012-06-15 11:25 1520转自:http://blog.csdn.net/jadyer/ ... -
Java Annotation(1)
2011-06-19 09:48 666作者:曾巧(numenzq) 摘要 Annotation( ... -
关于request得到路径的几种方法
2011-06-08 15:43 944request.getRequestURI() /jque ... -
JAVA EXCEL API 简介
2011-04-18 16:32 722转自:http://www.ibm.com/dev ... -
Hibernate 多对多双向关联
2011-03-21 11:09 621Hibernate 多对多双向关联 一、模型介绍 多个 ... -
Hibernate 一对多连接表双向关联
2011-03-21 11:09 768Hibernate 一对多连接表双向关联 一、模型介绍 ... -
Hibernate 一对多外键双向关联
2011-03-21 11:08 818Hibernate 一对多外键双向关联 一、模型介绍 ... -
Hibernate 一对一主键双向关联
2011-03-21 11:07 758Hibernate 一对一主键双向关联 一对一主键映射在一 ... -
Hibernate 一对一外键双向关联
2011-03-21 11:07 648Hibernate 一对一外键双向关联 一对一外键关联是一 ... -
Hibernate 多对多单向关联
2011-03-21 11:06 642Hibernate 多对多单向关联 一、模型介绍 多个人( ...
相关推荐
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 ``` ##...
Hibernate通过配置文件支持一对一、一对多、多对一和多对多的关系映射。 **缓存机制**: - **一级缓存**:内部缓存,每个Session有自己的缓存,生命周期与Session相同。 - **二级缓存**:可选的全局缓存,支持应用...
类之间的关系通过配置文件中的映射元素(如many-to-one、one-to-many、many-to-many)来定义,如一对一、一对多、多对多的关系映射。 Hibernate还提供了缓存机制,包括一级缓存(SessionFactory级别的缓存,每个...
3. **避免不必要的一对一关联**:多对一通常更为高效。 4. **对象缓存策略**:避免使用集合缓存,提高性能。 5. **集合类型选择**:Bag用于一对多,Set用于多对多,以确保无重复。 6. **显式多态**:在继承类中使用...
Struts是MVC(模型-视图-控制器)设计模式的一个实现,主要用于控制应用程序的流程,而Hibernate则是一个对象关系映射(ORM)工具,用于简化数据库操作。在这个"简单Struts+Hibernate实例"中,我们将深入探讨这两个...
在Struts2中,Action返回的结果通常会与一个JSP页面关联,通过Struts2标签库(如s:form、s:textfield等)来渲染表单和显示数据。 总的来说,这个小案例是一个很好的实战练习,涵盖了JavaEE开发中的重要组成部分,...
【购物车实例(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. 表字段要少,通过表关联实现复杂查询,依赖于二级缓存。 ###...
- 用多对一替换一对一,减少数据库表的冗余。 - 配置对象缓存,避免集合缓存带来的性能问题。 - 使用Bag(无序集合)处理一对多,Set(唯一元素集合)处理多对多。 - 显式使用多态处理继承关系。 - 减少表字段数量,...