Hibernate:一对多的双向关联和多对一的双向关联是不是一回事儿啊?

我知道一对多的单向关联和多对一的单向关联具体写起来时有区别的但是一对多的双向关联和多对一的双向关联是不是没区别是一回事儿啊?... 我知道一对多的单向关联和多对一的单向关联具体写起来时有区别的
但是一对多的双向关联和多对一的双向关联是不是没区别是一回事儿啊?
展开
 我来答
孤独飞雪飘
2012-12-04 · 只要有你陪我,静静的就足够!
孤独飞雪飘
采纳数:2228 获赞数:9895

向TA提问 私信TA
展开全部
一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同。

它们的区别在于维护的关系不同:
一对多关联映射是指在加载一的一端数据的同时加载多的一端的数据多对一关联映射是指在加载多的一端数据的同时加载一的一端的数据
N_0_1
高粉答主

推荐于2017-10-05 · 关注我不会让你失望
知道大有可为答主
回答量:8628
采纳率:47%
帮助的人:826万
展开全部
首先有两张关联的表,类别表Category和展品表Product,一个类别对应多种展品,

category字段有 id(主键),name

product字段有 id(主键) name,price,c_id(这个就是外键)

在Category类中

private Integer id;
private String name;
private Set<Product> products=new HashSet();//注意这里不要只写private Set<Product> products,不然后面会出现问题的,因为在取集合的时候回返回null,这样是不行的

定义好属性后再分别生成对于的get/set方法

在Product类中
private Integer id;
private String name;
private Double price;
private Category category;

再分别生成对对应的get/set方法

在设置相应的.hbm.xml文件

在Category.hbm.xml文件中

<hibernate-mapping>
<class name="com.cheng.entry.Category" table="category">
<id name="id" type="java.lang.Integer">
<column name="id"></column>
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="255"></column>
</property>
<set name="products(这个表示的就是Category类中的Set集合)">
<key column="c_id(这个说明的就是在表product中的外键)"></key>
<one-to-many class="com.cheng.entry.Product(说明所在的类)"/>
</set>
</class>
</hibernate-mapping>

在Product.hbm.xml中

<hibernate-mapping>
<class name="com.cheng.entry.Product" table="product">
<id name="id" type="java.lang.Integer">
<column name="id"></column>
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="200"></column>
</property>
<property name="price" type="java.lang.Double">
<column name="price" ></column>
</property>
<many-to-one name="category(这个就是在Product类中定义的)" class="com.cheng.entry.Category">
<column name="c_id(对应product表中的外键)"></column>
</many-to-one>
</class>
</hibernate-mapping>

这样就完成了

在这里还可以在
一方中设置 cascade属性
<set name="products(这个表示的就是Category类中的Set集合)" cascade="save-update">
<key column="p_id(这个说明的就是在表product中的外键)"></key>
<one-to-many class="com.cheng.entry.Product(说明所在的类)"/>
</set>

表示的级联,意思就是说主动方执行操作时,被关联的对象(被动方)是否要同步执行同一操作(在一对多的关联中,一般都是一方是主动方)
cascade有四个值:
none:什么也不做
save-update:一方进行添加和更新时(这个经常用)
all:所以操作
delete:
delete-orphan:

在一方中可以设置反转inverse="true"
控制反转,在一对多中让多方变为主动对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fatoshize
2012-12-04
知道答主
回答量:16
采纳率:0%
帮助的人:1.3万
展开全部
疼,双向好像是没区别吧, 反正双方都要加载
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-12-04
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式