Предотвращение вторичного выбора или объединения с 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;
 }
}

Ответы на вопрос(2)

Ваш ответ на вопрос