JPA:@ManyToOne关系的缺省列名映射

2022-09-01 09:23:57

当我们有一个类时:

@Entity
Order implements Serializable {
    @Id
    private Integer id;
    ...
}

和:

@Entity
OrderLine implements Serializable {
    @Id
    private Integer id;

    @ManyToOne
    Order order;
    ...
}

属性顺序将映射到哪个行名

order_id, ORDER_ID or Order_id?

(省略@JoinColumn(name='order_id')是故意的)


答案 1

我可能不明白你的问题。但是,您不需要下面这样的东西吗?

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="order_id", nullable=false)
Order order;

这里有一些例子


答案 2

以下是 JPA 1.0 规范对注释的编写内容:JoinColumn

9.1.6 连接列注释

...

注释元素定义外键列的名称。其余的批注元素(除 )引用此列,并且具有与列批注相同的语义。namereferencedColumnName

如果存在单个连接列,并且缺少注释成员,则连接列名称将形成为以下项的串联:引用关系属性的名称或引用实体的字段;"_";引用的主键列的名称。如果实体中没有这样的引用关系属性或字段(即,使用连接表),则连接列名称将形成为以下连接的连接:实体的名称;"_";引用的主键列的名称。name

...

因此,在您的示例中,外键列的默认名称将是 。order_id

引用

  • JPA 1.0 规范
    • 第 9.1.6 节 “连接列注释”

推荐