Hibernate Simple JoinTable без использования сущности - PullRequest
4 голосов
/ 31 марта 2012

Я пытаюсь запустить простую операцию JoinTable в Hibernate, и она мне подходит. У меня есть одна таблица, которая представляет сущность под названием «Персона». У меня есть другая таблица, которая представляет номера социального страхования (например). Я хочу иметь номер социального страхования в виде строки (это VARCHAR2), который будет являться собственностью PersonEntity. PersonEntity прекрасно работает без следующего кода. Вот что я пытаюсь сделать.

@JoinTable(name = "PERSON_ID_X_SSN", 
               joinColumns = {@JoinColumn(name = "PERSON_ID")})
    @Column(name="SSN", nullable=false, updatable=false)
    private String social;

Таблица PERSON_ID_X_SSN проста:

PERSON_ID, SSN

Все прекрасно работает без этого кода. Как только я добавлю его, вся сущность будет нулевой. Я бы предпочел не создавать отдельную сущность для PERSON_ID_X_SSN ... пожалуйста, помогите! Спасибо

1 Ответ

4 голосов
/ 01 апреля 2012

@ JoinTable - для указания таблицы, которая используется для сохранения отношений между сущностями.

В этом случае нет связи между сущностями, но одна сущность должна быть сохранена в двух таблицах. @ SecondaryTable - это аннотация, предназначенная для этой цели. Идея состоит в том, чтобы указать вторичную таблицу (или более одной через @SecondaryTables) для сущности и явно упомянуть имя таблицы в аннотации @Column, когда для сохранения атрибута следует использовать таблицу, отличную от первичной.

В вашем случае будет работать что-то вроде следующего:

@Entity
@Table(name="CUSTOMER")
@SecondaryTable(
  name="PERSON_ID_X_SSN", 
  pkJoinColumns=@PrimaryKeyJoinColumn(name="PERSON_ID"))
public class Person {
  @Column(table="PERSON_ID_X_SSN", name="SSN")
  private String social;
  ...
}

}

...