избегайте таблицы отношений в сопоставлении Hibernate «один ко многим» (или «один ко многим») с таблицами БД

Я новичок в 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. КОМПАНИЯ (поле идентификатора)
  2. FLIGHT(поле ID и поле COMP_ID)
  3. COMPANY_MANY_TO_ONE_FLIGHT (два поля: MANY_TO_ONE_COMPANY_id и Flight_id )

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

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

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


person xiaohan2012    schedule 11.07.2011    source источник


Ответы (1)


попробуйте использовать свойство 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

person GeorgeG    schedule 11.07.2011