- 浏览: 1572537 次
- 来自: 上海
文章分类
- 全部博客 (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.单向 1:1 基于主键关联
想象下 小康社会: 每家都有钱, 住起了小洋房 ,洋房编号: xx村2-36
eg: 一个地方有 一个人住.或者说 一家人住
eg: 每个同学家庭请了单独家教老师, 这样 1 对 1 的辅导
(在 原本N 变成了 1 的一端进行配置)
1 (N) 1
Person : Address
Student : Teacher
注意:基于主键关联,说的是Person表中id的值是Address表中的id
person
address
//test
如果一个地址 被多个person引用,此时会出问题,因为Person表中出现有多个相同的id
想象下 小康社会: 每家都有钱, 住起了小洋房 ,洋房编号: xx村2-36
eg: 一个地方有 一个人住.或者说 一家人住
eg: 每个同学家庭请了单独家教老师, 这样 1 对 1 的辅导
(在 原本N 变成了 1 的一端进行配置)
1 (N) 1
Person : Address
Student : Teacher
注意:基于主键关联,说的是Person表中id的值是Address表中的id
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... }
--基于主键关联的 1:1 关系 DROP TABLE IF EXISTS mytest.person; CREATE TABLE mytest.person ( PID INT NOT NULL, NAME VARCHAR (255), AGE INT, PRIMARY KEY (PID) ); DROP TABLE IF EXISTS mytest.address; CREATE TABLE mytest.address ( AID INT NOT NULL, ADDRESSDESC VARCHAR (255), PRIMARY KEY (AID) );
<!--person--> <hibernate-mapping package="com.sh.study.model.o2o"> <class name="Person" table="PERSON"> <!-- 基于主键的 1:1 --> <id name="pid" type="java.lang.Integer" column="PID"> <generator class="foreign" > <param name="property">address</param> </generator> </id> <one-to-one name="address" cascade="all"/> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <property name="age" type="int"> <column name="AGE" /> </property> <!-- 基于外键的 单向 1:1 注意 cascade--> <!-- unique="true" 表示 N 的一端必须是 唯一即可 这样就变成 单向 1:1 <many-to-one name="address" unique="true" cascade="all" class="Address" column="address_id"> </many-to-one> --> <!-- 基于中间表的 1:1 关系 <join table="person_address"> <key column="person_id"/> <many-to-one name="address" cascade="all" unique="true" 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); } //修改 Person的地址 @Test public void test1() { try { 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多家了一条数据,但是person的地址没有改变,也就是id没有变 Address address1=new Address(); address1.setAddressdesc("上海虹口"); p.setAddress(address1); session.flush(); System.out.println(p.getAddress().getAddressdesc()); Person pp=(Person)session.load(Person.class,1); System.out.println(pp.getAddress().getAddressdesc()); tx.commit(); } catch (Exception e) { e.printStackTrace(); } } //修改person的地址信息,此时修改Address对象就没有问题 @Test public void test2() { try { 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.setAddressdesc("上海虹口"); session.flush(); System.out.println(p.getAddress().getAddressdesc()); Person pp=(Person)session.load(Person.class,1); System.out.println(pp.getAddress().getAddressdesc()); tx.commit(); // 发现 地址是重新添加入了一个 此时数据库中有两个Address 一个 Person有以前的地址1 变成了 2 } catch (Exception e) { e.printStackTrace(); } } //同一个地址添加两个人会报错 @Test public void test3() { try { 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.setAddressdesc("上海虹口"); //如果一个地址添加了多个人 就会报错 /*Person p1=new Person(); p1.setAge(21); p1.setName("luck"); p1.setAddress(address); session.persist(p1);*/ session.flush(); System.out.println(p.getAddress().getAddressdesc()); Person pp=(Person)session.load(Person.class,1); System.out.println(pp.getAddress().getAddressdesc()); tx.commit(); } catch (Exception e) { e.printStackTrace(); } } }
如果一个地址 被多个person引用,此时会出问题,因为Person表中出现有多个相同的id
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.sh.study.model.o2o.Person#2]
发表评论
-
Hibernate的属性映射配置
2014-01-08 23:20 2128package com.crazyit.app.domai ... -
Hibernate 的初始化
2014-01-08 22:43 3504public static void main(Strin ... -
Hibernate 的关系与配置
2014-01-05 21:57 27571.单向 N:1 例如:一个地方有多个人住. (在1 的一端 ... -
Spring配置Hibernate事务
2013-11-10 13:45 1177为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事 ... -
Hibernate 关系映射(一)基于外键关联的N:1
2013-05-14 23:45 9771.单向 N:1 无中间表 例如:一个地方有多个人住. ... -
Hibernate 关系映射(二)基于中间表的N:1
2013-05-13 21:11 7851.单向 N:1 有中间表 例如:一个地方有多个人住. ... -
Hibernate 关系映射(三) 基于外键关联的单向 1:1
2013-05-03 23:42 9311.单向 1:1 基于外键的 想象下 小康社会: 每家都有钱, ... -
Hibernate 关系映射(四) 基于中间表关联的单向1:1
2013-05-02 20:07 10841.单向 1:1 基于中间表 想象下 小康社会: 每家都有钱, ... -
Hibernate 关系映射(6) 基于中间表关联的单向1:N
2013-03-21 17:55 938基于中间表关联的单向1:N 单向 1 对 N 关联,注意 和 ... -
Hibernate 关系映射(7) 基于外键关联的单向1:N
2013-03-21 00:31 826基于中间表关联的单向1:N 单向 1 对 N 关联,注意 和 ... -
Hibernate 缓存
2012-11-12 00:46 32801数据缓存:(date caching) ... -
Hibernate 的HQL,QBC 查询语言
2012-11-11 17:25 187091.HQL:(Hibernate Query Language ... -
HIbernate 关系映射配置
2012-11-11 02:10 21271.主键关联one-to-one 释义:两个表使用相同的主键 ... -
HIbernate 基础
2012-11-10 22:30 12191.标识符 表示符号生成器描述increment适用于代理主建 ... -
SSH2整合完整案例(四十三)
2012-09-14 09:34 20584注解配置:Struts2+Spring2.5+Hibernat ...
相关推荐
Hibernate 一对一主键单向关联 Hibernate 一对一连接表单向关联 Hibernate 一对多外键单向关联 Hibernate 一对多连接表单向关联 Hibernate 多对一外键单向关联 Hibernate 多对一连接表单向关联 Hibernate 多对多单向...
Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 │ ├─ 一对多外键单向关联 │ ├─ 一对多连接表单向关联 │ ├─ 多对一外键单向关联 │ ...
博文链接:https://shaqiang32.iteye.com/blog/201308
关于hiberante主键的一对一的映射,单向的,实例
http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
009 一对一 主键关联映射_单向 010 一对一 主键关联映射_双向 011 一对一 唯一外键关联映射_单向 012 一对一 唯一外键关联映射_双向 013 session_flush 014 一对多关联映射 单向 015 一对多关联映射 双向 016 多对多...
Hibernate高级映射的几个单向关系,单向一对一(共享主键方式、唯一外键方式),单向多对一,单向一对多,单向多对多。
在多对多关联中很多值是自动生成,党双向多对多关联中没有定义任何物理映射时,Hibernate根据以下规则生成相应的值,关联表名:主表表名+下划线+从表表名,关联到主表的外键名:主表名+下划线+主表中的主键列名,...
hibernate一对一主键关联映射(单向关联Person---->IdCard) 8 hibernate一对一主键关联映射(双向关联Person<---->IdCard) 9 hibernate一对一唯一外键关联映射(单向关联Person---->IdCard) 10 hibernate一对一...
Hibernate 实体关联关系映射 学习总结 把一对一 一对多 单向 双向 主键 外键 链接表等讲的比较清楚
7.1 建立多对一的单向关联关系 7.1.1 元素的not-null属性 7.1.2 级联保存和更新 7.2 映射一对多双向关联关系 7.2.1 元素的inverse属性 7.2.2 级联删除 7.2.3 父子关系 7.3 映射一对多双向自身关联...
2.4.3 Hibernate映射类型接口 41 2.4.4 可供扩展的接口 42 2.5 小结 43 2.6 思考题 45 第3章 第一个Hibernate应用 47 本章通过简单的helloapp应用例子,演示如何利用Hibernate来持久化Java对象。 3.1 创建...
7.1 建立多对一的单向关联关系 7.1.1 元素的not-null属性 7.1.2 级联保存和更新 7.2 映射一对多双向关联关系 7.2.1 元素的inverse属性 7.2.2 级联删除 7.2.3 父子关系 7.3 映射一对多双向自身关联...
7.1 建立多对一的单向关联关系 7.1.1 元素的not-null属性 7.1.2 级联保存和更新 7.2 映射一对多双向关联关系 7.2.1 元素的inverse属性 7.2.2 级联删除 7.2.3 父子关系 7.3 映射一对多双向自身关联...
7.1 建立多对一的单向关联关系 7.1.1 元素的not-null属性 7.1.2 级联保存和更新 7.2 映射一对多双向关联关系 7.2.1 元素的inverse属性 7.2.2 级联删除 7.2.3 父子关系 7.3 映射一对多双向自身关联...
单向一对一共享主键 该存储库正在存储有关Hibernate映射示例的源代码-共享主键上的单向一对一关联
2.4.3 Hibernate映射类型接口 41 2.4.4 可供扩展的接口 42 2.5 小结 43 2.6 思考题 45 第3章 第一个Hibernate应用 47 本章通过简单的helloapp应用例子,演示如何利用Hibernate来持久化Java对象。 3.1 创建...