Подтвердить что ты не робот

JPA: сопоставление имен столбцов по умолчанию для отношений @ManyToOne

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

@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?

(ommiting @JoinColumn (name= 'order_id') преднамеренно)

4b9b3361

Ответ 1

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

9.1.6 JoinColumn Annotation

...

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

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

...

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

Ссылки

  • Спецификация JPA 1.0
    • Раздел 9.1.6 "Аннотации JoinColumn"

Ответ 2

Я не понимаю ваш вопрос. Однако, вам не нужно что-то вроде ниже?

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

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