Hibernate эффективно извлекает несколько коллекций - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть класс Invoice. Имеет следующие коллекции.

@OneToMany(mappedBy = "taxInvoiceLinkId.invoice")
private List<TaxInvoiceLink>       taxLinks;

@OneToMany(mappedBy = "invoiceCustomInfoLinkId.invoice")
private Set<InvoiceCustomInfoLink> customInfos = new LinkedHashSet(0);

Для эффективного извлечения этих двух коллекций (в терминах туда и обратно) я должен сделать

Вариант 1: Присоединиться к выборке по

    Session session = SessionFactoryHandler.getSession();
    List result = null;
    session.beginTransaction();
    Query query = session.createQuery
                  (" From Invoice Inv left join fetch "+
                   " Inv.taxLinks left join fetch Inv.customInfos where 
                   invoice.id = 1");
    result = query.list();
    session.getTransaction().commit();
    return result;

Вариант 2: выполнить как два оператора

  Session session = SessionFactoryHandler.getSession();
    List result = null;
    session.beginTransaction();
    Query query = session.createQuery
                  (" From Invoice Inv left join fetch Inv.taxLinks
                       where invoice.id = 1" );
    result = query.list();

    query =  session.createQuery
                  (" From Invoice Inv left join fetch Inv.customInfos where 
                   invoice.id = 1");
    result = query.list();
    session.getTransaction().commit();
    return result;

1 Ответ

0 голосов
/ 04 ноября 2018

Замените список на Set и добавьте FetchType EAGER в отображение,

@Entity
Class Result{
    @OneToMany(mappedBy = "taxInvoiceLinkId.invoice",fetch=fetch=FetchType.EAGER)
    private Set<TaxInvoiceLink>       taxLinks;

    @OneToMany(mappedBy = "invoiceCustomInfoLinkId.invoice",,fetch=fetch=FetchType.EAGER)
    private Set<InvoiceCustomInfoLink> customInfos;
}

, затем получите вашу сущность, используя критерии,

Session session = SessionFactoryHandler.getSession();
List result = null;
session.beginTransaction();
Query query = session.createCriteria(Result.class);
List<Result> result = query.list();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...