Hibernate аннотации и отношение внешнего ключа - PullRequest
7 голосов
/ 28 июля 2010

У меня есть объект домена, аннотированный для поддержки гибернации.

@Entity
@Table(name = "INPUT")
public class AppInput {

  /**
   * Unique id for this request
   */
  @Id
  @GeneratedValue
  @Column(name = "INPUT_ID")
  private long requestId;
  /**
   * 
   */
  @Column(name = "EMAIL_ID")
  private String emailId;
  /**
   * 
   */
  @Column(name = "REQUEST_DATE")
      private Date requestDate;
  /**
    * 
   */
  @Column(name = "INPUT_STATUS")
   private char status;
  /**
   * 
   */
   @Column(name = "EXPECTED_ORDER_DATE")
  private Date expectedOrdDt;

//Getter and setters
   }

Свойство emailId является внешним ключом, относящимся к столбцу emailId в таблице User. Допустим, я добавляю подобное свойство в AppInput.java private User userDetails; Как мне аннотировать это так, чтобы при каждом извлечении AppInput из БД соответствующие данные пользователя также заполнялись?

1 Ответ

21 голосов
/ 28 июля 2010

Свойство emailId является внешним ключом, относящимся к столбцу emailId в таблице User.

Тогда не добавляйте свойство emailId, добавьте User.

(...) Как мне аннотировать это так, чтобы при каждом извлечении AppInput из db соответствующие данные пользователя также заполнялись?

Не уверен, поскольку это может быть ManyToOne или OneToOne, но я предполагаю, что это ManyToOne:

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="USERDETAILS_EMAIL_ID", referencedColumnName="EMAIL_ID")
private User userDetails;

Элемент аннотации fetchв демонстрационных целях EAGER является значением по умолчанию.Элементы аннотаций name и referencedColumn в JoinColumn также являются необязательными.Ниже приведена краткая сводка из спецификации JPA:

11.1.21 Аннотация JoinColumn

Аннотация JoinColumn используется для указания столбца для присоединения к ассоциации сущностей или коллекции элементов.

В таблице 20 перечислены элементы аннотации, которые могут быть указаны для аннотации JoinColumn, и их значения по умолчанию.

Если для самой аннотации JoinColumn по умолчанию используется один столбец соединения, иприменяются значения по умолчанию, описанные в таблице 20.

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

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

См. Таблицу 20 в спецификации для полных и исчерпывающих деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...