JPA:@ManyToOne关系的默认列名映射

Kde*_*per 23 java hibernate jpa openjpa

当我们上课时:

@Entity
Order implements Serializable {
    @Id
    private Integer id;
    ...
}
Run Code Online (Sandbox Code Playgroud)

和:

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

    @ManyToOne
    Order order;
    ...
}
Run Code Online (Sandbox Code Playgroud)

属性订单将映射到哪个行名称

order_id, ORDER_ID or Order_id?

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

Pas*_*ent 25

以下是JPA 1.0规范关于JoinColumn注释的内容:

9.1.6 JoinColumn注释

...

name注释元素定义了外键列的名称.其余的注释元素(除了referencedColumnName)引用此列,并且具有与Column注释相同的语义.

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

...

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

参考

  • JPA 1.0规范
    • 第9.1.6节"JoinColumn注释"


Osc*_*han 23

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

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="order_id", nullable=false)
Order order;
Run Code Online (Sandbox Code Playgroud)

这里有些例子

  • 我需要知道默认映射,因此 JPA 将如何映射没有“name”属性的属性。 (2认同)