V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
NoKey
V2EX  ›  程序员

jpa,两个表加一个中间表,如何才能不生成外键

  •  
  •   NoKey · 2021-02-01 23:43:10 +08:00 · 1534 次点击
    这是一个创建于 1409 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先

    spring.jpa.hibernate.ddl-auto=update
    

    这里改成 none,应该就没问题,但是这里给改了的话,jpa 的便利性就失去了很多

    我这里尝试了,两张表直接关联,使用 @JoinColumn 在这个里面加一句

    foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT)
    

    就能避免创建外键

    但是,如果两张表中间加一张关系表,用

    @JoinTable

    关联,上面的设置 foreignKey 的方式无效

    请教各位大佬,有没有好的办法啊,谢谢

    4 条回复    2021-02-09 11:41:01 +08:00
    4jjqu4z6BgN4uiKj
        1
    4jjqu4z6BgN4uiKj  
       2021-02-02 06:59:49 +08:00 via Android
    @JoinTable(name = "tablea_tableb",

                joinColumns = {@JoinColumn(name = "tablea_id", referencedColumnName = "id")},

                inverseJoinColumns = {@JoinColumn(name = "tableb_id", referencedColumnName = "id")},

                foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT),

                inverseForeignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))
    airfling
        2
    airfling  
       2021-02-02 08:13:45 +08:00
    spring.jpa.hibernate.ddl-auto=validate 然后自己建表,可以用 liquibase 进行数据库升级
    NoKey
        3
    NoKey  
    OP
       2021-02-09 11:40:15 +08:00
    @luxiang1996 感谢,确实有效。不过我这里遇到新的问题了,我写测试代码测试。有几个实体类,student,techer,然后有一张 student_techer 关联表,通过这个注解,没问题,工作正常。这个时候,我添加一个 lesson 类,就是课程,设定一个教师对应一个课程,写了一个 teacher_and_lesson 中间表。我在 teacher 中加了一个 lesson 成员,将这个注解加上去,启动完成后,teacher_and_lesson 表中会多出一个 student_id 字段。。。😭
    NoKey
        4
    NoKey  
    OP
       2021-02-09 11:41:01 +08:00
    @airfling 感谢。自己建表,引入 liquibase 的麻烦的地方就在于,表格有修改的时候,会修改好几个地方。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:40 · PVG 23:40 · LAX 07:40 · JFK 10:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.