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

时间:2010-10-18 22:49:44

标签: java hibernate jpa openjpa

当我们上课时:

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

2 个答案:

答案 0 :(得分:24)

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

  

9.1.6 JoinColumn Annotation

     

...

     

name注释元素定义   外键列的名称。   剩下的注释元素   (referencedColumnName除外)   请参阅此栏并具有相同的内容   列的语义   注释

     

如果有一个连接列,和   如果name注释成员是   缺少,连接列名称是   形成的连接形式   以下:引用的名称   关系属性或领域   引用实体; “_”;的名字   引用的主键列。如果   没有这样的参考   关系属性或领域   实体(即使用连接表),   连接列名称形成为   连接以下内容:   实体名称; “_”;的名字   引用的主键列。

     

...

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

参考

  • JPA 1.0规范
    • 第9.1.6节“JoinColumn注释”

答案 1 :(得分:20)

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

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

here are some examples