- 浏览: 1592128 次
- 来自: 上海
文章分类
- 全部博客 (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
注意:这样在Person中会多一列 对address_id 的外键引用列
Pesron
Address
//test
注意:cascade="all"
会出现异常:
例如:一个地方有多个人住.
每个同学记住老师,比老师记住每个同学简单.
(在 n 的一端进行配置效率高)
N 1
Person : Address
Student : Teacher
注意:这样在Person中会多一列 对address_id 的外键引用列
Pesron
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... }
#主表 DROP TABLE IF EXISTS mytest.address; CREATE TABLE mytest.address ( aid INTEGER NOT NULL, addressdesc VARCHAR (400), PRIMARY KEY (aid) ); #子表 DROP TABLE IF EXISTS mytest.person; CREATE TABLE mytest.person ( pid INTEGER NOT NULL, name VARCHAR (50) NOT NULL, age TINYINT NOT NULL DEFAULT 0, address_id INTEGER, PRIMARY KEY (pid), KEY address_id (address_id), CONSTRAINT person_ibfk_1 FOREIGN KEY (address_id) REFERENCES address (aid) );
<!--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> <!--name就是 Person中 的那个 address cascade="all" --> <many-to-one name="address" cascade="all" class="Address" column="address_id"> </many-to-one> </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 1221为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事 ... -
Hibernate 关系映射(二)基于中间表的N:1
2013-05-13 21:11 8231.单向 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 872基于中间表关联的单向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的`@OneToOne`注解实现一对一唯一外键关联映射,并实现双向关联。在实际项目中,应根据业务需求选择合适的级联操作和关联维护方式,以确保数据的完整性和一致性。
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的...以上就是关于Hibernate一对一唯一外键关联映射(单向关联)的详细说明。通过这种方式,我们可以轻松地在Java应用中处理数据库的一对一关系。
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理数据库中的唯一外键关联时。这种映射方式允许在一个实体类中引用另一个实体类的唯一实例,形成一对一的关系。在...
在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键,另一个实体作为关联目标。这种关联方式可以分为单向关联和双向关联两种。 单向关联是指一个实体作为外键,关联到另一个...
本篇将深入探讨Hibernate中的一对一唯一外键关联映射,特别是双向关联的实现。 ### 1. 一对一关联概述 一对一关联意味着一个实体只能与另一个实体的单一实例相关联,这种关系通常出现在两个表之间,其中一个表的...
在Hibernate中,一对一关系可以通过两种方式实现:外键关联和主键关联。本教程重点讨论的是外键关联,这意味着一方的表将包含指向另一方表的外键。双向关联意味着两个实体类都可以直接访问彼此。 接下来,我们将...
总结,主键关联和唯一外键关联都是Hibernate实现一对一映射的有效方式,各有优缺点。开发者应根据具体业务需求和数据模型,选择合适的关联策略。理解并熟练运用这些关联映射,对于提升Java后端开发的效率和代码质量...
这个文件名暗示了这是一组基于Spring、Struts和Hibernate(简称S2SH)的示例代码,具体涉及的是关系映射中的一对一单向外键关联。"uni_fk"表示单向(unidirectional)外键(foreign key)关联。在数据库中,外键用于...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联是常见的关系映射类型,它用于表示两个实体之间存在唯一的对应关系。本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的...
本篇主要探讨的是Hibernate中的一对一(OneToOne)关系映射,特别是唯一外键关联(UniDirectional and Bidirectional Association)的情况。我们将深入理解这种关联方式的配置、实现以及它在实际应用中的价值。 1. ...
本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...
在本案例中,我们将探讨如何在Hibernate中实现基于外键的双向一对一关联映射。 首先,我们来看一下双向一对一关联的基本概念。双向一对一关联意味着两个实体类A和B,它们之间存在一对一的关系,并且A能访问B,B也能...
“Hibernate基于外键的一对多单向关联”这个标题指的是在Java持久化框架Hibernate中,如何通过外键实现一个实体类(如订单)与另一个实体类(如商品)之间的一对多关系,并且这种关联是单向的,即从订单端可以访问到...
本篇将深入探讨Hibernate中的一对一单向外键关联,通过注解和XML配置两种方式进行实现。这种关联允许一个实体类与另一个实体类之间存在一对一的关系,并且只在其中一个实体类中维护这种关系。 首先,我们来理解一对...
综上所述,"Hibernate ORM - 一对一外键关联关系"是一个关于如何在Hibernate中设置和管理一对一关系的专题,涉及源码配置、工具使用和性能优化等多个方面。通过阅读相关的博客文章和实践压缩包中的示例,开发者可以...
在Java的持久化框架Hibernate中,一对一双向外键关联是一种常见的关系映射方式,用于表示两个实体类之间一对一的关联关系。在这个场景下,每个实体都有一个引用指向另一个实体,形成双向关联。本篇文章将深入探讨...
1. Hibernate 一对一外键单向关联: 在 Hibernate 中,一对一的外键单向关联意味着一个实体类中的属性指向另一个实体类,而另一个实体类并不知道这个关联。这种关联可以通过在 `many-to-one` 元素中添加 `unique=...
在Hibernate中,一对一关联可以被进一步细分为单向关联和双向关联,以及基于主键关联和基于外键关联。 #### 单向关联 - **基于主键关联**:在这种情况下,两个实体中的一个实体的主键作为另一个实体的外键,实现了...