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;
}

我的票务表包含40000多条记录,但订票附加信息没有任何数据。只有当我要添加其他信息时,此表才会包含数据。

在选择ticket表时,它会加入ticket_booking_additional_info表,并且该查询需要更多的时间。

我在@OneToOne中添加了fetch=FetchType.LAZY,但仍然需要很长时间才能响应。这是我数据库中最耗时的查询。如何避免这个问题。请有人给我指路。

我使用mysql数据库,

@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。你应该看到这个教程

  • OneToOne示例
  • OneToMany示例
  • ManyToOne示例

最新更新