Ленивая загрузка Blob-свойств одного класса - PullRequest
3 голосов
/ 19 марта 2010

Я хочу ленивую загрузку свойств @Lob. Во-первых, я использую javassist для инструментов своего класса, как описано здесь http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-fetching-lazyproperties: Код:

Мой класс содержит свойства "summary" и "title", такие как Lob и другие свойства. Код:


public class News extends BaseEntity{
   .
   .
   .
   @Lob
    @Basic(fetch = FetchType.LAZY)
    public String getSummary() {
        return summary;
    }</p>

<p>@Lob
@Basic(fetch = FetchType.LAZY)
public String getTitle() {
        return title;
       }</p>

<pre><code>@Temporal(TemporalType.TIMESTAMP)
public Date getPublishDate() {
    return publishDate;
}

. , , }

Сначала я загружаю одну новость из базы данных и хочу получить дату публикации (я пишу свои коды ниже) Код:

<code>
newsDAO.findByid(1L).getPublishDate();

и метод findByid:

<code>
Code:
public News findById(Long id) throws ServiceException {
        News  entity = em.getReference(entityClass, id);
         return entity;
    }

затем hibernate генерирует этот запрос: Код:

<code>
Hibernate:
    select
        news0_.id as id1_,
        news0_.entityVersion as entityVe2_1_,
        news0_.publishDate as publish15_1_,
        news0_.url as url1_
    from
        News news0_
    where
        news_.id=?
Этот запрос показывает, что он не извлекает свойство Lob и, к счастью, ленивая загрузка свойств Lob работает хорошо.

Но когда я загружаю только "краткое" свойство новостей Код:

<code>
newsDAO.findByid(1L).getSummary();

затем hibernate генерирует эти запросы: Код:

<code>
Hibernate:
    select
        news0_.id as id1_,
        news0_.entityVersion as entityVe2_1_,
        news0_.publishDate as publish15_1_,
        news0_.url as url1_
    from
        News news0_
Hibernate:
    select
        news_.summary as summary1_,
        news_.title as title1_
    from
        News news_
    where
        news_.id=?

У меня есть два вопроса: 1. Я только хочу получить свойство "summary", а не свойство "title", но запрос гибернации показывает, что он также получает свойство "title". Почему это происходит? 2. Почему hibernate генерирует два запроса для получения только сводных свойств новостей?

Буду признателен, если кто-нибудь поможет мне. Хосро.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2012

Мое решение состоит в том, чтобы создать отдельный объект Blob (который имеет только поле id + data) и ссылаться на него «один на один» с вашей сущностью, чтобы вы могли без проблем загружать его без проблем

0 голосов
/ 19 марта 2010
  1. Вы включили "ленивую выборку для правильной записи"? В отличие от других отложенных загрузок, по умолчанию она отключена

  2. В вашем коде вы вызвали 2 метода, поэтому я предполагаю, что hibernate генерирует 2 запроса. Как выглядит метод findById?

...