JPA: сопоставление имени столбца по умолчанию для отношений @ManyToOne - PullRequest
23 голосов
/ 19 октября 2010

Когда у нас есть класс:

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

и

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

    @ManyToOne
    Order order;
    ...
}

Какое имя строки будет сопоставлено свойству order ?

order_id, ORDER_ID or Order_id?

(исключение @JoinColumn (name = 'order_id') является преднамеренным)

Ответы [ 2 ]

24 голосов
/ 19 октября 2010

Вот что спецификация JPA 1.0 пишет о аннотации JoinColumn:

9.1.6 Аннотация JoinColumn

...

Элемент аннотации name определяет имя столбца внешнего ключа. Остальные элементы аннотации (кроме referencedColumnName) обратитесь к этому столбцу и иметь то же самое семантика как для колонки аннотаций.

Если есть один столбец соединения, и если элемент аннотации name отсутствует, имя столбца соединения сформированный как объединение следующее: название ссылки свойство отношения или поле ссылка на сущность; "_"; имя указанный столбец первичного ключа. Если нет такой ссылки свойство или поле отношения в сущность (то есть используется таблица соединения), имя столбца соединения формируется как объединение следующего: название организации; "_"; имя указанный столбец первичного ключа.

...

Так что в вашем примере имя столбца внешнего ключа по умолчанию будет order_id.

Ссылки

  • спецификация JPA 1.0
    • Раздел 9.1.6 «Аннотация JoinColumn»
20 голосов
/ 19 октября 2010

Я не могу понять ваш вопрос.Тем не менее, вам не нужно что-то вроде ниже?

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

вот несколько примеров

...