2016-01-14 3 views
0

В Hibernate, чтобы указать столбец для соединения ассоциации, @JoinColumn аннотации в употреблении, например, так:Является ли аннотация @JoinColumn обязательной в Hibernate?

@ManyToOne 
@JoinColumn(name="address_id") 
public Address getAddress() { 
    return address; 
} 

В большинстве случаев название колонки вилась-обсаженное имя класса плюс _id. Поэтому разумно ожидать от Hibernate автоматического ее получения (как это делается, например, в ORM Django). Но такое поведение каким-то образом реализовано?

+0

JPA имеет соглашение об именовании по умолчанию, видимое в спецификации JPA. Как показано на этой ссылке: http://www.datanucleus.org/products/accessplatform_4_2/jpa/orm/datastore_identifiers.html#rdbms_jpa –

+0

Если вы ее не используете, вы можете получить незакрепленную таблицу соединений. – Tobb

ответ

3

Нет необходимости, JPA следует принципам соглашения по конфигурации, что означает, что всегда есть значения по умолчанию, которые вы можете переопределить с помощью аннотаций.

В случае @JoinColumn, имя столбца по умолчанию генерируются следующим образом: <field_name>_<id_column_name>

field_name в вашем случае address и id_column_name ссылается на идентификатор связанного с ним лицом, которое id. Таким образом, вы получаете address_id по умолчанию.

+0

Что делать, если мне нужно имя столбца в snake_case (например, 'postal_code'), а имя поля - в lowerCamelCase (' postalCode')? –

+0

Если вам нужно переопределить соглашение об именовании по умолчанию, это именно то, что для @JoinColumn. – Tobb

+0

@Tobb Это локальное переопределение, которое нужно повторять всюду. Он отменяет только одно имя столбца. Возможно ли переопределить соглашение об именовании в одном месте (например, файл конфигурации) для всего проекта? –

1

Не обязательно иметь @JoinColumn аннотация. Вы всегда можете переопределить его. Если вы не укажете его в своем коде, Hibernate автоматически сгенерирует его для вас, то есть имя по умолчанию для вашего столбца.

+0

Не могли бы вы быть более конкретными? Что будет сгенерировать имя по умолчанию, и как я могу отменить эту аннотацию? –