2014-09-25 2 views
3

У меня есть два объекта, как показано нижеJPA один к одному отображению FetchType.LAZY не работает

@Entity 
@Table(name = "ticket") 
public class Ticket { 

    @OneToOne(fetch=FetchType.LAZY, targetEntity = com.vahana.entity.TicketBookingAdditionalInfo.class, mappedBy = "ticket", cascade = CascadeType.MERGE) 
    private TicketBookingAdditionalInfo ticketBookingAdditionalInfo; 

} 

@Entity 
@Table(name = "ticket_booking_additional_info") 
public class TicketBookingAdditionalInfo { 

    /** The ticket. */ 
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) 
    @JoinColumn(name = "ticket_id", columnDefinition = "BIGINT UNSIGNED") 
    private Ticket ticket; 

} 

Мой стол Билет содержит 40,000 записи, но бронирование билетов дополнительной информации не имеют какие-либо данных. Эта таблица будет содержать данные, только если я собираюсь добавить дополнительную информацию.

При выборе таблицы билетов он соединяется с таблицей ticket_booking_additional_info и этот запрос занимает больше времени.

Я добавил fetch = FetchType.LAZY в @OneToOne, но все равно требуется много времени для ответа. Это самый трудоемкий запрос в моей БД. Как избежать этой проблемы.Пожалуйста, один из них посоветует мне.

Am с использованием БД MySQL,

+3

Ваше отображение не самцы никакого смысла. Если у вас есть ManyToOne с одной стороны, вы должны иметь OneToMany с другой стороны, а не OneToOne. –

+0

Кроме того, согласно спецификациям JPA, FetchType.EAGER определяет поведение, которое должна выполнять каждая реализация JPA, в то время как FetchType.LAZY - это своего рода поведение подсказки ->, которое может отличаться в зависимости от используемого провайдера непрерывности. Какую реализацию JPA вы используете? – kyiu

+0

Спасибо, позвольте мне проверить отображение OneToMany вместо отображения OneToOne. – Akalya

ответ

1
@Entity 
@Table(name = "ticket") 
public class Ticket { 

    //Default is lazy 
    @OneToMany(mappedBy = "ticket", cascade = CascadeType.MERGE) 
    private List<TicketBookingAdditionalInfo> ticketBookingAdditionalInfo; 

} 

@Entity 
@Table(name = "ticket_booking_additional_info") 
public class TicketBookingAdditionalInfo { 

    // The ticket. 
    //Default is eager 
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) 
    @JoinColumn(name = "ticket_id", columnDefinition = "BIGINT UNSIGNED") 
    private Ticket ticket; 

} 

примечание Если у вас есть ManyToOne, обратная связь является OneToMany еще, если у вас есть OneToOne, обратная является OneToOne. Вы должны увидеть this Аркадам

Смежные вопросы