- 浏览: 1215062 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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小函数-计算日期差
--数据库oracle
在数据库设计里,one-to-one模型可以用2种方法来实现。
1,主键关联:这时候要保证2个表的主键具有完全相同的值。
2,外键关联:其中一个表使用外键关联另一个表。
模型:person vs idcard (人:身份证)
--这是带主外键关联的两张表。
-- 删除表
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) REFERENCES person(id) ON DELETE CASCADE,
serial VARCHAR2(18) NOT NULL ,
expiry NUMBER
) ;
2、pojo类
public class Person {
private String id ;//perosn的id
private String name;//名字
private int age; //年龄
private IdCard idcard;
}
public class IdCard {
private String id;//卡号
private String serial;//卡的号码
private int expiry;//可以使用年限
}
3、添加和删除的测试类。
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 void delete(String id)
{
String hql = "DELETE FROM Person WHERE id=?" ;
Query q = this.session.createQuery(hql) ;
q.setString(0, id) ;
q.executeUpdate() ;
this.session.beginTransaction().commit() ;
}
/**
* @param args
*/
public static void main(String[] args) {
PersonIdCardOperation po = new PersonIdCardOperation();
Person per = new Person() ;
per.setName("jack");
per.setAge(25);
// 准备好一张身份证
IdCard ic = new IdCard();
ic.setSerial("888888888888888");
ic.setExpiry(12);
per.setIdcard(ic);
ic.setPerson(per);
// po.insert(per) ;
po.delete("ff8080812887f59c012887f59d080001");
}
}
4、person配置文件
<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对象。-->
<one-to-one name="idcard"
class="org.onetoone.com.IdCard"
cascade="all"
outer-join="true" >
</one-to-one>
</class>
</hibernate-mapping>
5、idCard配置文件
<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>
<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>
6、总结一些属性的用法。
person配置文件中的一些属性:
1、class="uuid.hex" 用uuid.hex会自动生成的一个32位值。
2、cascade="all" 解释一下cascade的用法:
all :所有情况下均进行关联操作,all 的意思是save-update + delete 。
none:所有情况下均不进行关联操作。这是默认值。
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。
all-delete-orphan 的意思是当对象图中产生孤儿节点时,在数据库中删除该节点
all比较好理解,举个例子说一下all-delete-orphan:
Category与Item是一对多的关系,也就是说Category类中有个Set类型的变量items.
举个例子,现items中存两个Item, item1,item2,如果定义关系为all-delete-orphan
当items中删除掉一个item(比如用remove()方法删除item1),那么被删除的Item类实例
将变成孤儿节点,当执行category.update(),或session.flush()时
hibernate同步缓存和数据库,会把数据库中item1对应的记录删掉
3、outer-join="true":解释一下outer-join的用法:
outer-join参数允许下列三个不同值:
auto:(默认) 使用外连接抓取关联(对象),如果被关联的对象没有代理(proxy)
true:一直使用外连接来抓取关联
false:永远不使用外连接来抓取关联
4、因为是双向关联,所以每个配置文件里面都要配<one-to-one>的关联关系
idCard配置文件中的一些属性:
constrained="true":解释一下constrained的用法。(这个属性的说明是个难点吧)
1、constrained的默认值是false。
2、级联删除我是在数据库层设置的。这里的constrained就没有什么用了。
3、要是不在数据库中控制级联删除。设个属性还是有用的。
hibernate中constrained主要是在one-to-one的foreign主键生成策略的映射中使用。手册上说:
constrained(约束) (可选) 表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对
主键进行约束。这个选项影响save()和delete()在级联执行时的先后顺序以及 决定该关联能否被委托(也在schema export tool
中被使用).
如果constrained=true,则表明存在外键与关联表对应,并且关联表中肯定存在对应的键与其对应。hibernate生成的sql将使用
inner join. 另外该选项最关键的是影响save和delete的先后顺序。例如增加的时候,如果constainted=true,则会先增加关联
表,然后增加本表。删除的时候反之
7、本程序的级联删除是在数据库层控制的。
发表评论
-
Hibernate中二级缓存的配置和使用
2013-09-05 00:41 8461、 Hibernate中二级缓存的配置和使用 ... -
hibernate二级缓存攻略
2013-08-31 11:38 805来源; http://www.iteye.co ... -
hibernate 动态查询(指定查询字段)
2013-06-20 16:00 7791、http://www.blogjava.net/steve ... -
用hibernate插入数据时如何让默认值生效
2013-06-07 15:46 2440数据库中一个字段的默认值设为0,当用hibernate插入数 ... -
Hibernate的 dynamic-insert 与 dynamic-update
2013-06-06 15:04 928来源: Hibernate的 dynamic-insert ... -
hibernate 一对多 set 与 list 分别用法
2013-05-29 13:46 909hibernate 一对多 set 与 list 分别 ... -
Hibernate session的方法全集
2013-05-24 11:50 900Hibernate session的方法全集 ... -
hibernate中session的get()、load()方法比较
2013-05-24 10:37 1138来源: hibernate中sessio ... -
hibernate 数据库字段为CLOB时,配置文件的用法
2013-05-06 11:27 1168代码来源: http://blog.c ... -
Hibernate主键生成策略
2012-11-28 15:45 10251、Hibernate主键生成策略 ... -
JPA & Hibernate 注解
2010-09-14 10:41 1076JPA & Hibernate 注解 很详 ... -
JPA 批注参考
2010-09-02 19:48 949HIBERNATE JPA 批注参考 解释说明 第一 ... -
一对一外键双向关联
2010-05-21 14:06 1234--oracle数据库 //idcard表里面有个pid , ... -
一对一主键双向关联(用代码控制级联删除)
2010-05-21 09:52 2164一、下面的代码可以运行。 1、数据库脚本 --oracle ... -
自己学习hibernate的路线
2010-05-12 00:18 1021... -
Hibernate中 一 二级缓存及查询缓存的学习总结
2010-05-10 17:52 1030Hibernate中 一 二级缓存及查询缓存的学习总结 ht ... -
Hibernate集合映射中的set, list, map, bag, array
2010-04-07 14:26 11351、Hibernate集合映射中的set, list, map ... -
Hibernate 复合主键的简单应用
2010-02-23 10:52 9831、别人写的例子网站地址: http://www.blo ... -
Hibernate.cfg.xml配置文件(全面说明)
2010-01-22 10:52 971网站地址: 1、里面这里详细说明了(id 中(generat ... -
hibernate面试题(转载)
2009-09-25 01:22 890网站地址:http://hi.baidu.com/hbh200 ...
相关推荐
标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...
在Java的持久化框架...总结来说,Hibernate的一对一主键关联映射,尤其是双向关联,能有效地简化对象关系的映射,提高代码的可读性和维护性。然而,需要根据实际情况权衡其带来的性能影响,确保系统设计的高效性。
在Java的持久化框架中,Hibernate是...总之,掌握Hibernate Annotation中的共享主键一对一双向关联,能够帮助开发者更高效地进行数据库操作,提升项目的开发效率。通过深入学习和实践,可以更好地理解和利用这一特性。
在数据库设计中,这种关系通常通过主键和外键的方式实现,其中一方的主键作为另一方的外键,确保了两表间的一对一关系。 二、唯一外键关联映射 在Hibernate中,一对一关联可以通过配置XML映射文件或使用注解来实现...
`@OneToOne`用于声明一对一的关系,而`@JoinColumn`用于定义外键字段,它指定了哪一端的实体在数据库表中拥有外键。 假设我们有两个实体,一个是`Person`,另一个是`Profile`,它们之间存在一对一的关联。在`Person...
本知识点主要讲解的是使用Hibernate实现一对一主键关联(Primary Key Join)的方式,通过注解进行配置。 一对一的关联在数据库设计中并不常见,但当两个实体之间确实存在一对一的关系时,如用户和其个人资料,这种...
- 在一对一关联中,唯一外键关联是指在一个实体中定义了另一个实体的主键作为其字段,形成外键约束,确保了数据的一致性和完整性。 3. **双向关联与单向关联** - **单向关联**:只有一方知道另一方的存在,例如...
在Hibernate中,实现一对一主键关联有以下几种方式: 1. **共享主键关联**: 这种方式下,两个实体共用同一个主键。例如,我们可以创建两个实体类:`Person` 和 `Passport`,`Person` 的ID也是 `Passport` 的ID。...
需要注意的是,虽然一对一主键关联映射可以通过共享主键实现,但这也意味着如果一方被删除,另一方也会被级联删除,除非显式配置了`cascade`属性。此外,对于双向关联,需要在双方都定义`@OneToOne`注解,并通过`...
综上所述,Hibernate ORM 的一对一主键关联关系是通过共享主键或外键约束来实现两个实体间的唯一对应。在实际应用中,开发者需要根据需求选择合适的关联方式,并注意关联带来的性能影响。通过理解并熟练掌握这些配置...
本篇将深入探讨在Hibernate中实现一对一唯一外键的双向关联。 **一、配置一对一关联** 在Hibernate中,一对一关联可以通过以下两种方式建立: 1. **通过主键关联(Primary Key Join)**:这种关联方式下,一方的...
一对一双向关联关系指的是两个实体类之间存在一对一的关系,且在各自的类中都可以直接访问对方。这种关联可以通过注解或XML配置来实现。在Hibernate中,通常使用`@OneToOne`注解来定义一对一关系,而双向关联则意味...
在Java的持久化框架Hibernate中,`@OneToOne`注解用于表示一对一的关联关系,而唯一外键一对一双向关联则是这种关系的一种具体实现方式。这篇文章将深入探讨这一概念,帮助你理解如何在实际开发中应用。 首先,我们...
本篇文章将详细探讨三种常见的双向关联映射方式:双向多对多(BidirectionalManyToMany)、双向一对多(BidirectionalOneToMany)以及双向一对一(BidirectionalOneToOne),包括它们的概念、配置和实际应用。...
总结来说,JPA中的多对多双向关联实体定义涉及`@ManyToMany`、`@JoinTable`以及`mappedBy`等注解的使用。正确配置这些注解可以让我们轻松地管理实体之间的复杂关系,并简化数据库操作。在实际项目中,理解并熟练掌握...
- 一对一关联通常需要在数据库层面建立唯一约束,以确保两个表的主键/外键关联是唯一的。 - 当使用`cascade`属性时,需谨慎处理级联操作,避免不必要的数据删除或更新。 - 如果不希望在`Person`类中暴露`Address`...
以上就是关于Hibernate一对一关联关系的详细解释,通过理解和掌握这些知识点,你可以更有效地在Java项目中设计和实现数据库模型,提高代码的可读性和维护性。希望这份资源能帮助你更好地理解和运用Hibernate框架。
在数据库关系模型中,一对一(OneToOne)关联是一种常见的关系类型,表示两个实体之间存在唯一的对应关系。双向一对一关联则意味着双方实体都可以互相引用对方。在本案例中,我们将探讨如何在Hibernate中实现基于...
在实现基于外键的一对多双向关联时,理解注解的含义和作用至关重要,同时还需要考虑性能优化和潜在的问题,确保数据的正确性和一致性。通过阅读源码和实践,我们可以更深入地掌握Hibernate的内在机制。