V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GeekHub
kikione
V2EX  ›  程序员

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

  •  
  •   kikione · 3 天前 · 836 次点击

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

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

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

    14 条回复    2020-09-16 18:04:08 +08:00
    Jacky23333
        1
    Jacky23333   3 天前 via Android
    啊,这
    dorothyREN
        2
    dorothyREN   3 天前
    这问题太难了,还是让楼下来解答吧
    gz911122
        3
    gz911122   3 天前
    mybatis 不需要的
    sleaves
        4
    sleaves   3 天前
    除了以前学校建过外键外,开发了这么久就没建过什么外键,都是代码约束
    tctc4869
        5
    tctc4869   3 天前
    外键并不一定是物理以上,数据库里的外键,外键也有可能靠实体类代码进行约束,比如通过注解。这种外键,在数据库那里当然看不出外键。
    Jacky23333
        6
    Jacky23333   3 天前 via Android
    @tctc4869 你还是没看懂楼主的意思
    Jacky23333
        7
    Jacky23333   3 天前 via Android
    @tctc4869 你的意思就是说,数据库表没有建立外键还能查询是因为代码里面有了逻辑外键,也就是你觉得,外键是多表查询实现的基础?
    checkZH
        8
    checkZH   3 天前
    有一点可以明确,mybatis 是不需要的
    liuzhaowei55
        9
    liuzhaowei55   3 天前 via Android
    外键是约束,而不是物理关联吧。
    我这样理解的
    Jrue0011
        10
    Jrue0011   3 天前
    mybatis 的 association 和 collection 也不需要外键约束,一对一、一对多这些应该是实体关系而不是外键吧。

    注解指定了关联字段,orm 就能根据注解信息生成 SQL 用于查询,甚至新增和删除(作用就好像数据库的外键约束)。
    hyperbin
        11
    hyperbin   3 天前 via Android
    约束只管 insert,不管 select
    qwerthhusn
        12
    qwerthhusn   3 天前
    spring.jpa.hibernate.ddl-auto=validate
    再试试看
    默认的话是 none,这时 Hibernate 认为你的 Entity 定义和数据库定义都是 OK 的
    他只是生成这样的 SQL 去执行,但是此时有没有外键都能成功执行这个 SQL
    zsdroid
        13
    zsdroid   3 天前
    外键 ( foreign key ) 是用于建立和加强两个表数据之间的链接的一列或多列。
    我觉得关系表必定存在外键(数据库级别的实体外键,代码里的逻辑外键),也就是 jion on 部分。
    zsdroid
        14
    zsdroid   3 天前
    外键应该是广义上的关系键
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1171 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:14 · PVG 03:14 · LAX 12:14 · JFK 15:14
    ♥ Do have faith in what you're doing.