Hibernate генерирует несколько SQL-запросов, даже когда я использую функцию левого соединения - PullRequest
0 голосов
/ 01 апреля 2012

У меня интересная проблема с hibernate, модель выглядит следующим образом:

@NamedQueries({
    @NamedQuery(name = "A.test", query = "SELECT DISTINCT a FROM A a LEFT JOIN FETCH a.pk.b WHERE a.pk.b.pk.c.id = :cId AND a.pk.b.pk.d.id = :dId")
})
@Entity
@Table(name = "AT")
public class A implements Serializable {

    @EmbeddedId
    private APK pk;
}

@Embeddable
public class APK implements Serializable {

    @ManyToOne
    @JoinColumns({@JoinColumn(name = "***", referencedColumnName = "***"),
                  @JoinColumn(name = "***", referencedColumnName = "***")
    })
    private B b;
}

@Entity
@Table(name = "BT")
public class B implements Serializable {

    @EmbeddedId
    private BPK pk;
}


@Embeddable
public class APK implements Serializable {

    @ManyToOne
    @JoinColumn(name = "***", referencedColumnName = "***")
    private C c;

    @ManyToOne
    @JoinColumn(name = "***", referencedColumnName = "***")
    private D d;
}

Проблема в том, что именованный запрос делает дополнительные запросы SQL ... В чем проблема? Спасибо!

1 Ответ

1 голос
/ 01 апреля 2012

Hibernate по умолчанию охотно выбирает множество ссылок. При выборе «A» в вашем именованном запросе существует множество ссылок «один на один», которые будут разрешены и будут соответствовать запросам SQL, которые вы видите. Это поведение hibernate по умолчанию может быть изменено разумным размещением отложенной загрузки ваших аннотаций типа «многие к одному», т. Е .:

.
@ManyToOne(fetch=FetchType.LAZY)
...