- 浏览: 1217649 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (706)
- 全部博客(10000) (0)
- java基础 (123)
- 算法及数据结构 (64)
- SSH框架整合与平台系统分析 (11)
- j2ee (46)
- Oracle (95)
- SQL Server (11)
- javaScript (73)
- Ajax (22)
- jQuery (39)
- ExtJs (4)
- jsp (13)
- Servlet (6)
- struts1 (2)
- struts2 (33)
- Ibatis (2)
- hibernate (24)
- Spring (11)
- 设计模式 (8)
- 正则表达式 (9)
- UML (0)
- XML (9)
- linux (19)
- CSS (11)
- FreeMarker (4)
- nginx 与 memcached (6)
- SEO (5)
- Web 服务器 (11)
- junit 与 selenium2 (4)
- MyEclipse 有关的问题 (24)
- 生活杂感 (37)
- 看过的书 (2)
- 技术牛人 (2)
- 需要优化的例子 (3)
- English 学习 (7)
- bug修改的解决方法 (2)
- 数据库实战经验总结 (1)
- 期待解决的问题 (20)
- 等待自己学习的东西 (15)
- 自己公司代码结构总结 (15)
- 企业经营之道 (23)
- 工具管理 (1)
- 世范水晶 (2)
最新评论
-
hustkeai:
第一个方法是不对的
求一个Map中最大的value值,同时列出键,值 -
qq591920734:
java List 排序 Collections.sort() 对 List 排序(首先年龄排序,如果年龄相同,则按名字排序) -
qq591920734:
[color=orange][/color]包女包女不女
java List 排序 Collections.sort() 对 List 排序(首先年龄排序,如果年龄相同,则按名字排序) -
timer_yin:
seagrave 写道这个算法想法不错,但太耗时,我用1、2、 ...
用1、2、2、3、4、5这六个数字,数字排序经典算法 -
hellostory:
日常生活中,我们都不按你上面的那个方法算的!!!
JAVA小函数-计算日期差
一、下面的代码可以运行。
1、数据库脚本
--oracle数据库
-- 删除表
DROP TABLE idcard ;
DROP TABLE person ;
-- 创建表
CREATE TABLE person
(
id VARCHAR2(32) PRIMARY KEY ,
name VARCHAR2(20) NOT NULL ,
age NUMBER
) ;
CREATE TABLE idcard
(
id VARCHAR2(32),
serial VARCHAR2(18) NOT NULL ,
expiry NUMBER
) ;
//2############################################
// pojo类
//类一,IdCard
package org.onetoone.com;
public class IdCard {
private String id;//卡号
private String serial;//卡的号码(共18位)
private int expiry;//可以使用年限
private Person person;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSerial() {
return serial;
}
public void setSerial(String serial) {
this.serial = serial;
}
public int getExpiry() {
return expiry;
}
public void setExpiry(int expiry) {
this.expiry = expiry;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
// pojo类
//类二,Person
package org.onetoone.com;
public class Person {
private String id ;//perosn的id
private String name;//名字
private int age; //年龄
private IdCard idcard;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public IdCard getIdcard() {
return idcard;
}
public void setIdcard(IdCard idcard) {
this.idcard = idcard;
}
}
2、配置文件。
IdCard.hbm.xml
<hibernate-mapping>
<class name="org.onetoone.com.IdCard" table="idcard">
<!-- 引用Person的主键作为idCard的主键和外键 -->
<id name="id" column="id" type="java.lang.String">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<!-- constrained="true",表示idcard引用了Person主键作外键 -->
<one-to-one name="person"
class="org.onetoone.com.Person"
constrained="true">
</one-to-one>
<property name="serial" type="java.lang.String">
<column name="serial" length="18" not-null="true" />
</property>
<property name="expiry" type="java.lang.Integer">
<column name="expiry" not-null="true" />
</property>
</class>
</hibernate-mapping>
Person.hbm.xml
<hibernate-mapping>
<class name="org.onetoone.com.Person" table="person">
<id name="id" type="java.lang.String">
<column name="id" length="32" />
<generator class="uuid.hex"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" not-null="true" />
</property>
<property name="age" type="java.lang.Integer">
<column name="age" />
</property>
<!-- 下面中的cascade="all",级联保存,删除,修改时 person对象关联的idcard对象。-->
<!-- Hibernate outer-join参数允许下列三个不同值:
auto:(默认) 使用外连接抓取关联(对象),如果被关联的对象没有代理(proxy)
true:一直使用外连接来抓取关联
false:永远不使用外连接来抓取关联
-->
<one-to-one name="idcard"
class="org.onetoone.com.IdCard"
cascade="all"
outer-join="true"
>
</one-to-one>
</class>
</hibernate-mapping>
3、测试类。PersonIdCardOperation
public class PersonIdCardOperation {
private Session session = null;
public PersonIdCardOperation() {
this.session = new Configuration().configure().buildSessionFactory()
.openSession();
}
// 先插入一个用户
public void insert(Person per) {
this.session.save(per);
this.session.beginTransaction().commit();
session.close();
}
//这个查询是用来更新或删除用的
public Person queryById(String id) {
Person per = null;
String hql = "FROM Person AS p where p.id=?";
Query q = this.session.createQuery(hql);
q.setString(0, id);
List all = q.list();
if (all.size() > 0) {
per = (Person)all.get(0);
}
return per;
}
//更新person
public void update(Person per) {
this.session.update(per);
this.session.beginTransaction().commit();
}
//删除一个person
public void delete(Person per)
{
this.session.delete(per);
this.session.beginTransaction().commit() ;
}
// 一个专门用于更新身份证的操作
public void update(IdCard ic)
{
this.session.update(ic) ;
this.session.beginTransaction().commit() ;
}
// 一个专门用于删除身份证的操作
public void delete(IdCard ic)
{
this.session.delete(ic) ;
this.session.beginTransaction().commit() ;
}
/**
* @param args
*/
public static void main(String[] args) {
PersonIdCardOperation po = new PersonIdCardOperation();
//增加 person和idcard
/* Person per =new Person();
per.setName("jack");
per.setAge(19851105);
IdCard ic = new IdCard();
ic.setSerial("ttttttt");
ic.setExpiry(44);
per.setIdcard(ic);
ic.setPerson(per);
po.insert(per) ;*/
//***************************************************
//修改 person与idcard
/* Person uper =po.queryById("ff808081289edac801289edac90e0001");
uper.setName("jack");
uper.setAge(25);
IdCard uic = uper.getIdcard();
uic.setSerial("YYYYYY");
uic.setExpiry(8);
uper.setIdcard(uic);
uic.setPerson(uper);
//update它会根据你的信息有没有变化而去更新你的信息,它自己会判断一下的。
po.update(uper); */
//***************************************************
//删除 person 与idcard
/* Person dper =po.queryById("ff808081289ed0a101289ed0a22e0001");
IdCard dic = dper.getIdcard();
dper.setIdcard(dic);
dic.setPerson(dper);
po.delete(dper); */
}
}
4、总结:这个 一对一主键双向关联(用代码控制级联删除)的 和 在数据库控制级联删除 还是有点不同的。
发表评论
-
Hibernate中二级缓存的配置和使用
2013-09-05 00:41 8531、 Hibernate中二级缓存的配置和使用 ... -
hibernate二级缓存攻略
2013-08-31 11:38 811来源; http://www.iteye.co ... -
hibernate 动态查询(指定查询字段)
2013-06-20 16:00 7821、http://www.blogjava.net/steve ... -
用hibernate插入数据时如何让默认值生效
2013-06-07 15:46 2444数据库中一个字段的默认值设为0,当用hibernate插入数 ... -
Hibernate的 dynamic-insert 与 dynamic-update
2013-06-06 15:04 930来源: Hibernate的 dynamic-insert ... -
hibernate 一对多 set 与 list 分别用法
2013-05-29 13:46 912hibernate 一对多 set 与 list 分别 ... -
Hibernate session的方法全集
2013-05-24 11:50 907Hibernate session的方法全集 ... -
hibernate中session的get()、load()方法比较
2013-05-24 10:37 1145来源: hibernate中sessio ... -
hibernate 数据库字段为CLOB时,配置文件的用法
2013-05-06 11:27 1174代码来源: http://blog.c ... -
Hibernate主键生成策略
2012-11-28 15:45 10351、Hibernate主键生成策略 ... -
JPA & Hibernate 注解
2010-09-14 10:41 1081JPA & Hibernate 注解 很详 ... -
JPA 批注参考
2010-09-02 19:48 954HIBERNATE JPA 批注参考 解释说明 第一 ... -
一对一外键双向关联
2010-05-21 14:06 1237--oracle数据库 //idcard表里面有个pid , ... -
一对一主键双向关联(在数据库层控制级联删除)
2010-05-12 01:32 3964--数据库oracle 在数据库设计里,one-to-on ... -
自己学习hibernate的路线
2010-05-12 00:18 1028... -
Hibernate中 一 二级缓存及查询缓存的学习总结
2010-05-10 17:52 1037Hibernate中 一 二级缓存及查询缓存的学习总结 ht ... -
Hibernate集合映射中的set, list, map, bag, array
2010-04-07 14:26 11381、Hibernate集合映射中的set, list, map ... -
Hibernate 复合主键的简单应用
2010-02-23 10:52 9861、别人写的例子网站地址: http://www.blo ... -
Hibernate.cfg.xml配置文件(全面说明)
2010-01-22 10:52 974网站地址: 1、里面这里详细说明了(id 中(generat ... -
hibernate面试题(转载)
2009-09-25 01:22 893网站地址:http://hi.baidu.com/hbh200 ...
相关推荐
综上所述,Hibernate ORM 的一对一主键关联关系是通过共享主键或外键约束来实现两个实体间的唯一对应。在实际应用中,开发者需要根据需求选择合适的关联方式,并注意关联带来的性能影响。通过理解并熟练掌握这些配置...
以上就是关于Hibernate一对一关联关系的详细解释,通过理解和掌握这些知识点,你可以更有效地在Java项目中设计和实现数据库模型,提高代码的可读性和维护性。希望这份资源能帮助你更好地理解和运用Hibernate框架。
- 在一对一双向关联中,如果两个实体都维护外键,可能会导致数据不一致,因此要谨慎处理。 总结起来,Hibernate双向一对一关联映射通过XML配置文件使得我们在Java代码中可以方便地操作数据库中的一对一关系,同时...
本文将深入探讨基于外键的一对一关联查询,并通过具体的代码示例进行解析。 ### 1. 基于外键的一对一关联 在一对一关联中,外键方式是指在一个实体类中引用另一个实体类的主键作为外键。这种方式下,关联关系的...
6. **级联操作**:我们还可以通过设置`cascade`属性来控制级联操作,比如删除一个`Student`时,是否应同时删除其关联的所有`Course`。 7. **缓存策略**:考虑使用缓存提高性能,比如二级缓存,但要注意多对多关系...
2. **配置另一方实体**:在另一方实体的类中,同样定义一个双向关联的属性,这次不需要`mappedBy`,而是使用`@OneToOne`注解的`cascade`属性来控制级联操作。 ```java @Entity public class UserProfile { @Id @...
"Hibernate的关联映射"是Hibernate中的核心概念之一,用于模拟数据库中的关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)四种关系。现在,让我们详细探讨...
关联可以是单向或双向的,单向关联只需在拥有主键的一方添加注解,而双向关联则需要在双方都添加注解,并通过`mappedBy`属性指定关联的另一方。此外,为了确保唯一性,通常会设置外键约束。 **一对多关联(One-to-...
本教程将深入探讨Hibernate中的四种主要数据关联:一对一(11)、多对一(M1)、一对多(1N)和多对多(MN)的关系映射。 1. **一对一(11)关联**: 在现实世界中,有些实体间存在一对一的关系,例如一个人只有一...
1:1(一对一)关联表示两个实体之间存在一对一的关系,例如一个人对应一张唯一的身份证。在Hibernate中,可以通过`<one-to-one>`标签实现。如示例所示,`Person`类和`IDCard`类之间的关联就是这样设置的。在`Person....
- 使用 `<one-to-one>` 元素来实现一对一关联,`<generator class="foreign">` 指定主键生成器为 foreign,确保与 `idCard` 共享相同的对象标识符(OID)。`constrained="true"` 添加了外键约束,保证 `Citizen` 的...
在一对一关系中,通常使用`@JoinColumn`创建外键关联。 4. **级联操作** 使用`cascade`属性可以控制关联对象的生命周期。例如,`cascade="all"`会将所有操作(包括保存、更新、删除)都应用于关联的对象。 5. **...
1. **一对一(OneToOne)映射**:一个实体对象对应数据库中的一个记录。通过`@OneToOne`注解来实现,可以是单向或双向。`@JoinColumn`用于指定外键所在的字段,`@MapsId`则表明关联对象的主键就是当前对象的主键。 ...
5. **双向关联**:在一对一和一对多关系中,通常会定义双向关联,即双方都能访问对方。这需要在两个类中都添加相应的注解,并通过`inversedBy`属性进行关联。 6. **级联操作(Cascading)**:级联操作允许将操作...
这篇教程将深入探讨Hibernate的关联关系,包括1对1、一对多和多对多等类型,并通过简单的代码示例帮助初学者理解和应用。 1. **1对1关联关系** 在数据库设计中,1对1关联意味着一个表的记录最多对应另一个表的一条...
- `cascade`属性:控制级联操作,如`CascadeType.ALL`表示所有操作都级联到关联对象。 - `unique`属性:对于一对一关系,如果要求关联对象唯一,可设置为`true`。 5. **性能优化** - 避免过多的EAGER加载,以免...
- 使用`@OneToOne`注解进行一对一映射配置。 - **多对一映射**: - 使用`@ManyToOne`注解进行多对一映射配置。 - **一对多映射**: - 使用`@OneToMany`注解进行一对多映射配置。 - **多对多映射**: - 使用`@...
例如,标签用于描述多对一的关联映射,而则用于描述一对一的主键关联映射。文档中还提到了级联属性(-cascade),它定义了在对父对象进行操作时,是否将操作也作用到关联的子对象上。 文档通过对象模型和关系模型的...
- **一对一**:定义一对一的关联关系。 - **自然ID(natural-id)**:定义自然主键。 - **组件(component)和动态组件(dynamic-component)**:定义组件类型的映射。 - **属性(Properties)**:定义属性集合的...
- **双向关联与连接表**:说明如何使用连接表来实现双向关联。 #### 九、组件映射 - **依赖对象**:解释如何映射没有独立生命周期的组件对象。 - **依赖对象集合**:展示如何映射依赖对象的集合。 - **Map 索引组件...