Предотвращение вторичного выбора или объединения с Hibernate Criteria или HQL-запросом
У меня возникают проблемы с оптимизацией запросов Hibernate, чтобы избежать выполнения объединений или вторичного выбора.
Когда выполняется запрос Hibernate (критерий или hql), например:
return getSession().createQuery(("from GiftCard as card where card.recipientNotificationRequested=1").list();
... и предложение where исследует свойства, которые не требуют каких-либо объединений с другими таблицами ... но Hibernate по-прежнему выполняет полное объединение с другими таблицами (или вторичными вариантами выбора в зависимости от того, как я установил fetchMode).
У рассматриваемого объекта (GiftCard) есть пара ассоциаций ManyToOne, которые я предпочел бы загружать лениво в этом случае (но не обязательно во всех случаях). Я хочу решение, которое я могу контролировать, что лениво загружается при выполнении запроса.
Вот как выглядит объект GiftCard:
@Entity
@Table(name = "giftCards")
public class GiftCard implements Serializable
{
private static final long serialVersionUID = 1L;
private String id_;
private User buyer_;
private boolean isRecipientNotificationRequested_;
@Id
public String getId()
{
return this.id_;
}
public void setId(String id)
{
this.id_ = id;
}
@ManyToOne
@JoinColumn(name = "buyerUserId")
@NotFound(action = NotFoundAction.IGNORE)
public User getBuyer()
{
return this.buyer_;
}
public void setBuyer(User buyer)
{
this.buyer_ = buyer;
}
@Column(name="isRecipientNotificationRequested", nullable=false, columnDefinition="tinyint")
public boolean isRecipientNotificationRequested()
{
return this.isRecipientNotificationRequested_;
}
public void setRecipientNotificationRequested(boolean isRecipientNotificationRequested)
{
this.isRecipientNotificationRequested_ = isRecipientNotificationRequested;
}
}