如何在@JoinColumn中覆盖单个列连接的默认生成的SQL名称

时间:2012-09-20 23:30:14

标签: java jpa

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

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

此实体的FK和PK列以及子实体都是“引用”

当为此连接生成SQL时,它使用默认的objectname + _ + PK“pub_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 个答案:

答案 0 :(得分:1)

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