问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate中设置constrained的问题

发布网友 发布时间:2022-04-28 03:50

我来回答

2个回答

懂视网 时间:2022-04-28 08:11

下面由Laravel教程栏目给大家介绍Laravel 7 使用 constrained 方法来设置数据库外键,希望对需要的朋友有所帮助!

Laravel

大家好,

今天,我想写一个快速提示关于在Laravel7中使用外键。

此方法将会帮助您编写更短的迁移,并使代码更具可读性。

在我们的例子中,我使用非常常见的 user_id,它可以应用于任何外键。

以前,我们会这样写:

$table->unsignedBigInteger('user_id')
->index();

$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');

嗯,有点冗长,对吧?

好消息是我们现在可以这样写 :

$table->foreignId('user_id')
->index()
->constrained()
->onDelete('cascade');

更简练且更容易阅读,我希望你喜欢这个提示。

如果你觉得有用的话,请和你的朋友们分享吧。

祝您有个美好的一天。

原文地址:https://dev.to/wolfiton/laravel-7-short-cuts-to-writing-foreign-keys-4c1o

译文地址:https://learnku.com/laravel/t/49371

热心网友 时间:2022-04-28 05:19

<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=? 删除的时候最好删除从表,删除主表会先查询下主表,在联合查询下。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在公交车上实施扒窃,会受到怎样的处罚? 交通违法行为识别 公交车扒窃会如何处罚? 郑州鱼缸清洗找哪家公司做得比较好? 郑州有没有专业维修鱼缸,清洗鱼缸的? ...的鱼缸,放在办公室养些鱼水草之类的。郑州哪里有卖这样的鱼缸。_百... 我们公司想要定做个观赏鱼缸,不知道郑州哪家公司最专业? 谁知道郑州生态鱼缸定做哪家做的效果最好? 联想电脑启用无线功能的功能键? 笔记本电脑怎么连接网笔记本电脑怎样连接无线网 蓝屏代码0xc0000098 win7开机时出现0xc0000098这个代码是怎么回事?和内存条有关吗?如何解决? 电脑出现0xc0000098,用老毛桃无法修复 0xc0000098是哪里的问题,怎样快速解决? 电脑启动显示恢复错误代码:0xc000098 电脑windows出现这个0xc0000098怎么办? 请求帮助,本人笔记本开不了机,启动显示状态0xc0000098,没有U盘没有光 电脑开不了机,显示oxc0000098,请问如何修复,电脑里还有有用文件, 电脑这种情况怎么处理0xc0000098 电脑出现代码0xc0000098怎么办 重装系统出现0xc0000098怎么解决? 电脑开机0xc0000098不用U盘怎么处理? 0xc00000098不能开机 重装系统出现0xc0000098怎么解决 电脑开不了机显示状态0xc0000098怎么办呢各位大神? 打开ug8.0时出现无法正常启动0xc000007b是什么原因? win10安装后出现:cmd.exe-应用程序错误错误代码:(0xc000007b)怎么解决? 程序无法正常启动0xc000007b怎么解决 请问Worktile、Teambition和侎佧这三款协同办公管理软件哪个更好用? teambition收费吗 ectouch微商城如何兼容多高版本php 怎么样判断php扩展与php版本的兼容性 php版本控制是什么 如何简单的理解php对接的接口? PHP版本控制 是怎么玩的 PHP如何保证api接口数 PHP的预定义接口都有哪些,都是这么使用的? PHP能不能给一个API接口同时发送多条请求! 做个企业网站,必须要必备的几个要素是什么? 建立一个企业网站需要花多少钱? 一个企业网站,都需要具备那些功能? 企业网站为什么要需求分析? 企业网站建设需要考虑的需求? 网站建设公司的具体需求是什么? 建一个企业网站需要做些什么? 企业网站有哪些要求? 企业网站都需要做什么? 什么是命名空间 如何理解命名空间?使用命名空间有什么好处? C#里的命名空间是什么意思?