@PrimaryKeyJoinColumn,名称为外键

时间:2017-05-02 16:52:29

标签: java hibernate jpa

在hibernate-jpa-api-2.0下,我可以使用带有oneToOne关系的@PrimaryKeyJoinColumn来指定外键的名称吗?

我尝试了以下但似乎没有用。

@OneToOne(optional = false, fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn(name = "CARID")
@ForeignKey(name = "FK_CAR_CORP")
public CarEntity getCar() {
    return car;
}

3 个答案:

答案 0 :(得分:0)

mappedBy属性仅对双向关系是必需的,注释上可以省略此元素。它在源实体上用于指向定义关系的目标实体上的字段(包含@JoinColumn)。

@JoinColumn注释应放在billSimpleEntry字段上,以定义应该用于连接两个表的列。对于OneToOne,以下情况适用:

如果连接是使用外键映射策略进行OneToOne或ManyToOne映射,则外键列位于源实体的表中或可嵌入。 这是一个代码示例:

@OneToOne(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name="id") // use actual column name
private ClassName className; // use class name

答案 1 :(得分:0)

我不认为@ForeignKey适用于hibernate-jpa-api-2.0,按照它在2.1中发布的文档

Since:
    Java Persistence 2.1

here是doc

答案 2 :(得分:0)

可以使用两个@ForeignKey注释:

org.hibernate.annotations.ForeignKey (Hibernate annotation)
javax.persistence.ForeignKey (JPA annotation)

Hibernate 4(即使是最后一个版本)有时也无法处理,可能是bug javax.persistence.ForeignKey注释的原因。

例如,对于Hibernate 4.3.11,我们应该在单向关联的org.hibernate.annotations.ForeignKey部分使用@OneToMany。我们可以在双向关联的javax.persistence.ForeignKey部分使用@ManyToOne

因此,您可以尝试使用Hibernate org.hibernate.annotations.ForeignKey注释。