我有两个类似的实体
@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示例