当前位置: 首页 > 知识库问答 >
问题:

当我有@ManyTomany时如何设置ForeignKey名称

张献
2023-03-14

我正在使用JPA类创建数据库。

如果我们有许多对一个关系,我们可以重写ForeignKey name name,如下所示:

@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "FK_COUNTRY"))
private Country country;

以DB为单位,我们会有这样一个结果:

@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "NEW_TABLE",  foreignKey = @ForeignKey(name = "FK_TEST"))
@JoinTable(
        name="NEW_TABLE",
        joinColumns=
            @JoinColumn(name="ID1", referencedColumnName="ID",  foreignKey = @ForeignKey(name = "FK_DEV_ID")),
        inverseJoinColumns=ID2", referencedColumnName="ID", foreignKey = @ForeignKey(name = "FK_DEV_ZONE"))
    )  
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="NEW_TABLE_2",
            joinColumns=
                @JoinColumn(name="ID1", referencedColumnName="ID", 
                            foreignKey = @ForeignKey(name = "FK_1")
                ),
            inverseJoinColumns=
                @JoinColumn(name="ID2", referencedColumnName="ID", 
                            foreignKey = @ForeignKey(name = "FK_2")
                ),

            foreignKey = @ForeignKey(name = "FK_1"),
            inverseForeignKey = @ForeignKey(name = "FK_2")
    )  

private List<MyObject> deviceZones;

我使用这个版本的JARS:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.6.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.6.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate.common</groupId>
    <artifactId>hibernate-commons-annotations</artifactId>
    <version>4.0.5.Final</version>
</dependency>


<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.2.Final</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.0.6.RELEASE</version>
</dependency>

我的java版本是1.8

共有1个答案

赫连靖琪
2023-03-14

我猜你有一些罐子冲突。我建议这样做:

  1. 删除以下JAR:hibernate-commons-annotations和hibernate-entitymanager
  2. 然后查看以下内容,您可以如何更改外键的名称
 类似资料:
  • 问题内容: 我有一个模型: 如何编写基于类的视图,该视图创建新的模型实例并将外键设置为? 问题答案: 我通过覆盖方法解决了这个问题。下面是详细说明的样式: 但是我们可以简短地说(感谢dowjones123),在docs中提到了这种情况。

  • 当我使用concurrentKafkaListenerContainerFactory时,有什么方法可以设置主题吗?我根本不想做任何注释。

  • 问题内容: 是否引用ListView 或列表中选择的特定项目? 问题答案: 相信是指整体。要为项目添加点击处理程序,您想使用AdapterView.setOnItemClickListener。

  • 问题内容: 我很难理解Django模型中的关系。 有人可以解释一下OneToOne,ManyToMany和ForeignKey之间的区别吗? 问题答案: 好吧,这里基本上有两个问题: 一对一,多对多和外键关系之间的区别(通常)是什么 它们对Django有什么区别。 通过简单的Google搜索,可以很容易地回答这两个问题,但是由于我在SO上找不到该问题的确切答案,因此我将继续回答。 请注意,在Dja

  • 问题内容: 我已经使用TensorFlow编写了RNN语言模型。该模型被实现为一个类。图结构内置在构造函数中,而and方法则运行它。 当我移到训练集中的新文档时,或者当我想在训练期间运行验证集时,我希望能够重置RNN状态。我通过在训练循环中管理状态,并通过Feed字典将其传递到图形中来实现此目的。 在构造函数中,我像这样定义RNN 训练循环如下所示 并且是在文档中的训练数据批次。这样做的想法是,每

  • 我有两个kafka代理,使用SSL的kafka-0和使用PLAINTEXT的kafka-1(使用Docker映像部署)。 我需要设置security.inter.broker.protocol,以便kafka-0和kafka-1可以相互对话。当我将两个代理都设置为明文时,kafka-0会给出以下错误: hafka-0的广告监听器是 同时,如果我将两个代理的协议都设置为SSL,kafka-1会抱怨: