31

当我们上课时:

@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') 是故意的)

4

2 回答 2

38

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

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

这里有些例子

于 2010-10-18T22:53:57.343 回答
33

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

9.1.6 JoinColumn注解

...

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

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

...

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

参考

  • JPA 1.0 规范
    • 第 9.1.6 节“JoinColumn 注释”
于 2010-10-18T23:05:33.930 回答