hibernate中设置constrained的问题

constrained="true"给本表主键增加外键约束,那这个外键约束有什么用呢?如果不加(设置成false又有什么影响?)... constrained="true"给本表主键增加外键约束,那这个外键约束有什么用呢?如果不加(设置成false又有什么影响?) 展开
 我来答
大胡子J
推荐于2017-09-19 · TA获得超过221个赞
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:158万
展开全部
<hibernate-mapping>
<class name=”yourpackage.Student” table=”Student”>
<id name=”sid” column=”sid” type=”integer”>
  <generator class=”foreign”>
    <param name=”property”>address</param>
  </generator>
</id>
<property name=”sname” column=”sname” type=”string”/>
<one-to-one name=”address” class=”yourpackage.Address” constrained=”true”/>
</class>
</hibernate-mapping>

constrained属性是在主键映射一对一关系的时候会用到的


一.外键约束有什么用

1,约束就是为了保持数据完整性,尽量减少数据冗余。而外键就是其中一种约束

例如:现在有两张表,Class(班级)表和Student(学生)表

如果现在有个操作是要删除班级,那么班级对应的学生也应该一起删除才是对的(不然班级删除了,但是班级对应的学生还留着,这就是数据冗余,这些学生数据就会变成无用的数据)

如果两个表没有约束,那么就有可能会出现删除了班级而没有删除学生的情况

那么这时候,我们在Student表中设置一个外键参照Class表,这时会出现什么情况呢,当你删除班级的时候就会报错,你必须先删除班级里的所有学生之后,你才可以删除班级(这是很合理的)

2,一般我们使用关系数据库,会存在三种关联关系,即一对多(多对一),多对多,一对一,如何建立这三种关联呢,在关系数据库中也可以使用外键来关联

~@一般地,外键设置就是实现了一对多关系,而外键设置的一方就是多的一方,如1所述,就是实现了一(Class)对多(Student)的关系

~@而多对多需要一张辅助表,这里就不多说了

~@这里再说下一对一是什么情况,其实就是多对一的特殊情况,当多的一方变成唯一之后,就是一对一了,如在主键上建立外键就是这种情况,因为主键是唯一标识记录的


二.constrained的作用(转)

Hibernate文档上是这么写的:

constrained(约束) (可选) 表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。这个选项影响save() 和delete() 在级联执行时的先后顺序(也在schema export tool中被使用)。


constrained默认值为false


constrained只能在one-to-one的映射中使用,(一般在主表的映射中,有外键的那个表)。如果constrained=true, 则表明存在外键与关联表对应,并且关联表中肯定存在对应的键与其对应, 另外该选项最关键的是影响save和delete的先后顺序。例如增加的时候,如果constainted=true,则会先增加关联表,然后增加本表。 删除的时候反之。


one-to-one的单向关联中,如果constrained=false,则会在查询时就全部取出来,用left outer join的方式。如果constrained=true,hibernate即会延迟加载sql,只把主表的查出来,等有用到关联表的再发sql取。


one-to- one的双向关联中,必须设置constrained=true,要不然会有重复数据读,如2个表user,car;在位false时sql如 下:select * from user a left outer join car b on a.id=b.id left outer join on user c on a.id=c.id where a.id=? 删除的时候最好删除从表,删除主表会先查询下主表,在联合查询下。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式