избегать таблицы отношений в отображении Hibernate один-ко-многим (или один-ко-многим) в таблицы БД - PullRequest
0 голосов
/ 11 июля 2011

Я новичок в Hibernate.Я заметил, что в Hibernate отображение java-классов в таблицы базы данных часто включает таблицы отношений, даже иногда таблицы отношений не нужны (как в отношении «один ко многим» или наоборот).

Например:

Я являюсь классом Компании и классом Полетов, в котором у компании может быть много рейсов (ассоциация один-ко-многим от Компании к Полету).

У меня есть следующий код, использующий аннотации в спящем режиме:

@Entity
@Table(name = "COMPANY")
public class Company {

    @Id
    private Long id;

    @OneToMany
    private Set<Flight> flights = new HashSet<Flight>();

    ......
    getter and setter methods
    ......
}



@Entity
@Table(name="FLIGHT")
public class Flight{
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "COMP_ID")
    private Company ownerCompany;

    ......
    getter and setter methods
    ......

}

Классы успешно сопоставлены с базой данных.И есть три таблицы:

  1. COMPANY (поле идентификатора)
  2. FLIGHT (поле идентификатора и поле COMP_ID)
  3. COMPANY_MANY_TO_ONE_FLIGHT(два поля: MANY_TO_ONE_COMPANY_id и flight_id)

Однако последняя таблица COMPANY_MANY_TO_ONE_FLIGHT - это таблица отношений, добавленная hibernate, которая является избыточной.

Очевидно, что в таблице FLIGHT есть внешний ключ COMP_ID, и разумно удалить таблицу избыточных отношений.

И как мне избежать такого обстоятельства?Как и путем изменения аннотаций.

1 Ответ

2 голосов
/ 11 июля 2011

попробуйте использовать свойство mappedBy в аннотации @OneToMany:

@OneToMany(mappedBy="ownerCompany")
private Set<Flight> flights = new HashSet<Flight>();

вы можете посмотреть общие ассоциации mappend с аннотациями гибернации здесь: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-association

...