数据库的表与表不建立外键,为什么 hibernate 还能够 进行多对一 一对多 查询?

2020-09-16 15:00:55 +08:00
 kikione

公司的一个旧项目,数据库的表与表不建立外键,为什么 hibernate 还能够 进行多对一 一对多 查询?

另外,不建立外键 多对一会有什么影响吗?

mybatis 一定是需要建立外键吧? 我记得我不建立不会查询成功

2504 次点击
所在节点    程序员
14 条回复
Jacky23333
2020-09-16 15:04:31 +08:00
啊,这
dorothyREN
2020-09-16 15:08:28 +08:00
这问题太难了,还是让楼下来解答吧
gz911122
2020-09-16 15:08:52 +08:00
mybatis 不需要的
sleaves
2020-09-16 15:14:27 +08:00
除了以前学校建过外键外,开发了这么久就没建过什么外键,都是代码约束
tctc4869
2020-09-16 15:17:08 +08:00
外键并不一定是物理以上,数据库里的外键,外键也有可能靠实体类代码进行约束,比如通过注解。这种外键,在数据库那里当然看不出外键。
Jacky23333
2020-09-16 15:25:25 +08:00
@tctc4869 你还是没看懂楼主的意思
Jacky23333
2020-09-16 15:29:47 +08:00
@tctc4869 你的意思就是说,数据库表没有建立外键还能查询是因为代码里面有了逻辑外键,也就是你觉得,外键是多表查询实现的基础?
checkZH
2020-09-16 15:31:59 +08:00
有一点可以明确,mybatis 是不需要的
liuzhaowei55
2020-09-16 16:02:57 +08:00
外键是约束,而不是物理关联吧。
我这样理解的
Jrue0011
2020-09-16 16:17:19 +08:00
mybatis 的 association 和 collection 也不需要外键约束,一对一、一对多这些应该是实体关系而不是外键吧。

注解指定了关联字段,orm 就能根据注解信息生成 SQL 用于查询,甚至新增和删除(作用就好像数据库的外键约束)。
hyperbin
2020-09-16 17:19:42 +08:00
约束只管 insert,不管 select
qwerthhusn
2020-09-16 17:43:36 +08:00
spring.jpa.hibernate.ddl-auto=validate
再试试看
默认的话是 none,这时 Hibernate 认为你的 Entity 定义和数据库定义都是 OK 的
他只是生成这样的 SQL 去执行,但是此时有没有外键都能成功执行这个 SQL
zsdroid
2020-09-16 18:03:45 +08:00
外键 ( foreign key ) 是用于建立和加强两个表数据之间的链接的一列或多列。
我觉得关系表必定存在外键(数据库级别的实体外键,代码里的逻辑外键),也就是 jion on 部分。
zsdroid
2020-09-16 18:04:08 +08:00
外键应该是广义上的关系键

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/707577

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX