3.7.4 双向关联
来源:互联网 发布:安徽致远软件 编辑:程序博客网 时间:2024/04/29 12:43
到目前为止,一切看起来都工作的很好。但是我们仍然需要能够为特定的item取得所有的bid。这里我们需要一个双向的关联,因此我们需要为Item类添加一些代码:
你可以把addBid()方法当成是在对象模型中实现了一个可管理的关联。
一个基本的one-to-many关联看起来是这样:
<key>元素所定义的类映射是表格BID的一个外键列。注意在前的many-to-one关联映射中,我们也指定了同样的的列。在图3.11中你可以看到关于这个关联的表结构。
现在我们有了连个不同的单向映射关联到同一个外键,这可能会引发一个问题。在运行的时候,在内存中对于同一个外键的值有两个的表示:Bid的item属性和Item的bids集合。假设我们的应用程序通过addBid()方法为item增加了一个bid:
bid.setItem(item);
bids.add(bid);
看起来代码很简单,但是在这种情况下,对于同一个持久化实例,Hibernate会在内存中检测到两个不同的变化。从数据库的角度来看:仅仅需要一个值来反映这些变化:那就是修改ITEM_ID列。由于Hibernate无法检测到两个不同的变更实际上关联到同一个数据库列,因此我们需要指出这是一个双向关联才可以。
如果没有这个inverse属性,Hibernate会尝试执行两个不同的SQL语句,同时更新同一个外键列。通过inverse=”true”,我们可以明确的高速Hibernate关联的哪一端来同步数据库。在本例中,将由Bid来控制数据库的更新。因此,我们我们调用item.getBids().add(bid)方法的话,不会做任何的持久化。这与没有Hibernate的Java代码一样:如果关联是双向的,那么你需要在双方创建连接,而不是仅仅是单向的连接。
现在我们需要双向的many-to-one关联。
现在我们将来介绍cascading save和cascading delete,为此我们需要完成关于这个关联的映射。
当我们实例化一个Bid把它加到Item的时候,bid会马上进行持久化。我们需要避免显式的调用save()方法来完成持久化。
下面我们来配置映射使cascading save生效:
cascade属性告诉Hibernate如果一个Bid对象被一个持久化了的Item 应用的话,那么它也将被持久化。
cascade属性是是有方向性的:她只作用于关联的一端。我们也可以在many-to-one关联中指定cascade=”save-update”,但是这么做并不会起到任何作用,因为Bids是在Items之后创建的。
结束了?还没有完全结束。我们仍然需要定义关联中的实体的生命周期。
- 3.7.4 双向关联
- 关联映射-双向关联
- [code]关联关系-双向关联
- 双向一对一关联配置
- JPA 一对一双向关联
- Hibernate one2many 双向关联
- hibernate关联映射-双向
- hibernate双向关联注意
- 一对一单向双向关联
- Hibernate一对一双向关联
- hibernate 一对一双向关联
- Hibernate一对一双向关联
- mybatis---一对一双向关联
- hibernate configration 双向关联
- Hibernate 双向一对一关联
- 一对多双向关联
- 一对多双向关联
- Hibernate一对一双向关联
- grub ��ϵͳ������linux (ubuntu) ���°�װxp��linux���ܱ�����
- 数组和指针 计算内存容量
- 关于cavlc的理解和t264代码分析
- 你以为你能拿多少钱?
- The hierarchy of the type is inconsistent
- 3.7.4 双向关联
- linux驱动开发教程1
- Language family tree of Python, Ruby and Lua
- 打开确认窗口
- 存储过程批量修改MySql引擎
- 一个在widegets平台上实现的时钟程序
- 数组 指针 静态存储区
- 在表格中直接修改值 回车表示确定
- 数据库分页