Spring配置映射关系时一对多、多对一和多对多关联到底有何区别,可否互相取代

2024-11-04 13:03:09
推荐回答(2个)
回答1:

元芳说:大人这事我认为:
1>你的问题应该是数据库设计方面的,至少是Java框架中的持久层框架中的概念,与Spring好像没什么关系.
2>计算机软件是为了解决某一领域问题而设计的.所以领域问题的环境,使用情况,都影响着软件设计.例如一本书这个对象在不同的语境环境下就与其它事或物有不同的关系.
(a)"你有一本<>",那么这种关系应该是:一对一.但是你一定还有其它的图书<<高等数学>><<操作系统>>等,所以关系统应该是:一对多. 注意:重要的是我们思考问题的范围,或者叫做说话的语境,我们目前谈论的都是在"人与自己的书"这个语境下的.
(b)如果是"人与图书馆的书"这个语境,刚才的一对多就有问题了.因为1个人可以借阅许多书,一本书如果不是在同一时间就可以借给许多人.所以在数据库表中设计时就应该是多对多.假设我们现在给这个数据库表取名为"T_学生借书记录",但是只用这张表是不够的,为什么?因为至少要有"T_图书"和"T_同学"这两张表来存储基本信息.
现在我们理一下思路,为了记录学生借书的记录,我们共设计了三张表:"T_同学","T_图书","T_学生借书记录".
你想一下这三张表是必须的,不能多,也不能少.实现上"T_学生借书记录"这张表有一个名词叫分解实体/关联表(UML中叫关联类).
因为关系数据库系统无法保存多对多的联系,所以必须把多对多转换成1对多,请看"T_同学"与"T_学生借书记录"的关系就是一对多.
因为一个学生可以多次借书, "T_图书"与"T_学生借书记录"的关系也是一对多.因为一本书在不同时间可以被许多人借阅.
实际上"一对多"与"多对一"这两个说法只是对一种关系的两种不同说话方式而已.例如,假设你有100本书.在这个语境下分析下面两句话"你有许多书"与"这些书都是你的",这两名话的区别是什么?只是在一句话中"主对象"与"从对象"不同而已,而人与书的关系是不变的 也就是说在数据库中的两张表A和B是一对多的关系,与B和A是多对一的关系,是一样的.

回答2:

这应该是在model层配的吧,一般是hibernate,jpa,ibatis等