- 浏览: 1592134 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
1.单向 N:1 有中间表
例如:一个地方有多个人住.
每个同学记住老师,比老师记住每个同学简单.
(在 n 的一端进行配置效率高)
N 1
Person : Address
Student : Teacher
注意:这次是有中间表
注意:比较 有无中间表的 配置,发现 采用 Join 和 many-to-one 进行配置
中间表
Person
Address
//test
注意:cascade="all"
会出现异常:
例如:一个地方有多个人住.
每个同学记住老师,比老师记住每个同学简单.
(在 n 的一端进行配置效率高)
N 1
Person : Address
Student : Teacher
注意:这次是有中间表
注意:比较 有无中间表的 配置,发现 采用 Join 和 many-to-one 进行配置
中间表
Person
Address
public class Address { private Integer aid; private String addressDetail; //set get ... } public class Person { private Integer pid; private String name; private int age; private Address address; //单向(N:1) 反过来(1:1) //set get... }
# person address N:1µÄ Öмä±í CREATE TABLE mytest.person_address ( persson_id INT NOT NULL, address_id INT, PRIMARY KEY (persson_id), KEY FK23F8B90A67DFD9E4 (address_id), KEY FK23F8B90A5A57D6C9 (persson_id), CONSTRAINT FK23F8B90A5A57D6C9 FOREIGN KEY (persson_id) REFERENCES person (PID), CONSTRAINT FK23F8B90A67DFD9E4 FOREIGN KEY (address_id) REFERENCES address (AID) ); #Address DROP TABLE IF EXISTS mytest.address; CREATE TABLE mytest.address ( AID INT NOT NULL, ADDRESSDESC VARCHAR (255), PRIMARY KEY (AID) ); #Person DROP TABLE IF EXISTS mytest.person; CREATE TABLE mytest.person ( PID INT NOT NULL, NAME VARCHAR (255), AGE INT, PRIMARY KEY (PID) );
<!--person--> <hibernate-mapping package="com.sh.study.model"> <class name="Person" table="PERSON"> <id name="pid" type="java.lang.Integer" column="PID"> <generator class="increment"/> </id> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <property name="age" type="int"> <column name="AGE" /> </property> <!-- Person 和 address 没有中间表的 N:1 配置 --> <!--name就是 Person中 的那个 address cascade="all" <many-to-one name="address" class="Address" column="address_id"> </many-to-one> --> <!-- person 和 address 有中间表的 N:1 配置 --> <join table="person_address"> <key column="persson_id"/> <many-to-one name="address" cascade="all" class="Address" column="address_id"/> </join> </class> </hibernate-mapping> <!--address--> <hibernate-mapping package="com.sh.study.model"> <class name="Address" table="ADDRESS"> <id name="aid" type="java.lang.Integer" column="AID"> <generator class="increment"/> </id> <property name="addressdesc" type="java.lang.String"> <column name="ADDRESSDESC" /> </property> </class> </hibernate-mapping>
//test
public class TestHibernate { private ApplicationContext act; private SessionFactory factory; @Before public void init(){ act = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"); factory= act.getBean("sessionFactory",SessionFactory.class); } //测试 无 五间表的 N:1 关系 @Test public void test1() { Session session=factory.getCurrentSession(); Transaction tx=session.beginTransaction(); Person p=new Person(); p.setAge(12); p.setName("Yeeku"); Address address=new Address(); address.setAddressdesc("北京海淀区"); p.setAddress(address); //持久化对象 session.persist(p); session.flush(); tx.commit(); //如果不是使用的SessionFactory.getSession()来获得Session。 //而是使用SessionFactory.getCurrentSession()方法来获得Session时, //当事务结束的时候,不管是提交还是回滚事务,hibernate会自动关闭Session的, //session.close(); } //测试 无 中间表的 N:1 关系 @Test public void test2() { Session session=factory.getCurrentSession(); Transaction tx=session.beginTransaction(); Person p=new Person(); p.setAge(12); p.setName("Yeeku"); Address address=new Address(); address.setAddressdesc("北京海淀区"); p.setAddress(address); //持久化对象 session.persist(p); //修改 Person的 地址 Address address1=new Address(); address1.setAddressdesc("上海虹口"); p.setAddress(address1); tx.commit(); } }
注意:cascade="all"
<!--如果Person配置--> <hibernate-mapping package="com.sh.study.model"> <class name="Person" table="PERSON"> <id name="pid" type="java.lang.Integer" column="PID"> <generator class="increment"/> </id> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <property name="age" type="int"> <column name="AGE" /> </property> <!--如果少了 下面这个 cascade="all" --> <many-to-one name="address" class="Address" column="address_id"> </many-to-one> </class> </hibernate-mapping>
会出现异常:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.sh.study.model.Address
发表评论
-
Hibernate的属性映射配置
2014-01-08 23:20 2177package com.crazyit.app.domai ... -
Hibernate 的初始化
2014-01-08 22:43 3562public static void main(Strin ... -
Hibernate 的关系与配置
2014-01-05 21:57 28251.单向 N:1 例如:一个地方有多个人住. (在1 的一端 ... -
Spring配置Hibernate事务
2013-11-10 13:45 1222为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事 ... -
Hibernate 关系映射(一)基于外键关联的N:1
2013-05-14 23:45 10321.单向 N:1 无中间表 例如:一个地方有多个人住. ... -
Hibernate 关系映射(三) 基于外键关联的单向 1:1
2013-05-03 23:42 9781.单向 1:1 基于外键的 想象下 小康社会: 每家都有钱, ... -
Hibernate 关系映射(四) 基于中间表关联的单向1:1
2013-05-02 20:07 11291.单向 1:1 基于中间表 想象下 小康社会: 每家都有钱, ... -
Hibernate 关系映射(五) 基于主键关联的单向1:1
2013-03-26 00:23 9381.单向 1:1 基于主键关联 想象下 小康社会: 每家都有钱 ... -
Hibernate 关系映射(6) 基于中间表关联的单向1:N
2013-03-21 17:55 977基于中间表关联的单向1:N 单向 1 对 N 关联,注意 和 ... -
Hibernate 关系映射(7) 基于外键关联的单向1:N
2013-03-21 00:31 873基于中间表关联的单向1:N 单向 1 对 N 关联,注意 和 ... -
Hibernate 缓存
2012-11-12 00:46 33431数据缓存:(date caching) ... -
Hibernate 的HQL,QBC 查询语言
2012-11-11 17:25 187841.HQL:(Hibernate Query Language ... -
HIbernate 关系映射配置
2012-11-11 02:10 21841.主键关联one-to-one 释义:两个表使用相同的主键 ... -
HIbernate 基础
2012-11-10 22:30 12621.标识符 表示符号生成器描述increment适用于代理主建 ... -
SSH2整合完整案例(四十三)
2012-09-14 09:34 20690注解配置:Struts2+Spring2.5+Hibernat ...
相关推荐
在多对多的情况下,需要在映射文件中指定中间连接表,以及如何在中间表中映射到关联类属性。 #### 三、总结 通过上述介绍,我们可以清楚地了解到Hibernate中不同类型的关联映射及其具体的映射方式。正确理解和使用...
- **对象关系映射(ORM)**:Hibernate是ORM框架的代表,它通过将Java对象与数据库中的表进行映射,使得开发者可以以面向对象的方式来操作数据库。 - **实体类与数据表**:理解如何定义Java实体类并将其映射到数据库...
Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用Java对象来操作数据库,而无需直接编写SQL语句。在Hibernate源码的学习过程中,我们可以深入理解ORM的工作原理,提高我们的Java开发技能,并且能够...
Hibernate是一个开源的、基于Java的持久化框架,它提供了一种在Java应用和关系数据库之间建立映射的方法,使得开发者可以通过对象模型进行数据库操作,降低了数据库访问的复杂性。它的核心组件包括:Session、...
关联映射通过外键或中间表实现,允许对象间的复杂关系映射。 10. **延迟加载(Lazy Loading)** 延迟加载是一种优化策略,只有在真正需要时才加载关联的对象。这通常通过代理对象实现,避免了“n+1”查询问题,...
通过XML文件或注解,Hibernate可以将Java对象映射到数据库表,实现对象和关系型数据之间的转换。 ##### Middlegen工具和hbm2java工具 这些工具可以自动生成实体类代码,减少手动编码的工作量。 #### 企业在线信息...
3. **Hibernate映射** 映射是将Java对象模型与数据库表结构对应的过程。Hibernate支持XML配置文件(hibernate.cfg.xml和.hbm.xml)和注解两种方式来定义映射关系。映射文件或注解中定义了实体类、属性、主键、关联...
Hibernate是一个开源的ORM框架,它通过映射Java对象到关系数据库表,实现了对象与关系数据之间的无缝转换。这使得开发者可以专注于业务逻辑,而不必过多地关注底层的SQL操作。Hibernate支持多种数据库,如MySQL、...
- Hibernate是一个面向对象的持久化框架,它通过ORM(Object Relational Mapping)的方式将对象模型映射到关系型数据库上。 - **3.2.2 重要jar文件介绍** - 包括Hibernate核心库、日志框架库、数据库驱动库等。 - ...
SSH(Struts2 + Spring + Hibernate)是Java开发中常用的一种Web应用开发框架组合,它结合了Struts的MVC设计模式、Spring的依赖注入和事务管理以及Hibernate的对象关系映射能力。本笔记主要探讨SSH中的映射关系,...
- **情景1:不带应用程序服务器的Web服务器**:适用于简单的Web应用,其中Web服务器直接处理所有请求。 - **情景2:带应用程序服务器的Web服务器**:更复杂的应用通常会使用应用程序服务器来处理业务逻辑,而Web...
而Hibernate则是一个对象关系映射(ORM)框架,简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以避免编写大量的JDBC代码,提高开发效率和代码可维护性。 四、Message-Oriented Middleware (MOM) 和 ...
- **递归实现**:`n * factorial(n - 1)`。 ##### UE和UI的区别 - **UE (User Experience)**:用户体验设计,关注用户如何与产品交互。 - **UI (User Interface)**:用户界面设计,关注产品的外观和布局。 ##### ...
Hibernate则用于ORM(对象关系映射)。 2. **Struts1与Struts2的区别**:Struts1基于Servlet API,使用ActionForm对象来封装请求参数;而Struts2则更现代,基于拦截器模型,支持更多功能,如类型转换、验证、国际化...
**2.3.1 情景1:不带应用程序服务器的Web服务器** 在这种情况下,Web服务器只能处理静态内容,无法处理动态内容。 **2.3.2 情景2:带应用程序服务器的Web服务器** 这种组合能够处理动态内容,例如通过Servlets和...
- **2.3.1 情景 1:不带应用程序服务器的 Web 服务器**:只能处理静态内容。 - **2.3.2 情景 2:带应用程序服务器的 Web 服务器**:能处理静态和动态内容。 **2.4 应用程序服务器示例** - **2.4.1 BEA Weblogic**:...
// 在这中间可以添加N行代码,但必须保证s引用的指向不变,最终将输出变成abcd System.out.println(s); } ``` **答案解析:** 1. **s1 == s2** 为 `false`。 - 这里假设 `s1` 和 `s2` 分别代表 `"abc"` 和通过 `...