有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何覆盖@JoinColumn中为单个列联接生成的默认SQL名称

在我的实体中,我有一个单向的一个对象

@OneToMany(mappedBy="pub", cascade = CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="reference")

此实体和子实体的FK和PK列均为“参考”

当为该联接生成SQL时,它使用默认的objectname+\uPK“pub\u reference”,并忽略我传入的名称

我可以将name=更改为任何名称,但它总是被忽略

即使名称是单列联接,如何重写其默认行为

母实体

@OneToMany(mappedBy="pub", cascade = CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="bob")
private Collection<PubDisplayText> pubDisplayText;

子实体

private Pub pub;

@Id
@XmlTransient
    public Pub getPub() {
    return pub;
}

public void setPub(Pub pub) {
    this.pub = pub;
}

参考http://docs.oracle.com/javaee/6/api/javax/persistence/JoinColumn.html#name%28%29


共 (1) 个答案

  1. # 1 楼答案

    单向一对多映射必须使用联接表。通过指定@OneToMany,意味着一对多的双向性。mappedBy元素。因此,映射从“拥有”映射(由“mappedBy”指定的映射)中获取联接列名。由于此处未指定任何连接,因此使用默认的连接列