延迟加载一个类的Blob属性

时间:2010-03-19 15:53:28

标签: hibernate lazy-loading blob

我想延迟加载@Lob属性。 首先,我使用javassist来检测我的类http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-fetching-lazyproperties: 代码:

我的类包含“摘要”和“标题”属性,它们是Lob和其他属性。 码:


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

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

@Temporal(TemporalType.TIMESTAMP)
public Date getPublishDate() {
    return publishDate;
}

. . . }

首先我从数据库加载一条新闻并想要检索新闻的发布日期(我在下面写下我的代码) 码:

@Temporal(TemporalType.TIMESTAMP)
public Date getPublishDate() {
    return publishDate;
}

和findByid方法是:


newsDAO.findByid(1L).getPublishDate();

然后,hibernate生成此查询: 码:


Code:
public News findById(Long id) throws ServiceException {
        News  entity = em.getReference(entityClass, id);
         return entity;
    }
此查询显示,它不检索Lob属性,幸运的是Lob属性的延迟加载效果很好。

但是当我只加载新闻的“摘要”属性时 码:


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=?

然后,hibernate生成这些查询: 码:


newsDAO.findByid(1L).getSummary();

我有两个问题: 1.我只想检索“summary”属性而不是“title”属性,但是hibernate查询显示它还检索“title”属性,为什么会这样? 2.为什么hibernate生成两个查询只检索新闻的摘要属性?

如果有人帮助我,我将不胜感激。 在Khosro。

2 个答案:

答案 0 :(得分:0)

  1. 您是否启用了“lazy fetching for propery”?与其他延迟抓取不同,默认情况下禁用

  2. 在你的代码中,你调用了2方法,所以我猜hibernate会生成2个查询。 findById方法如何?

答案 1 :(得分:0)

我的解决方案是创建一个单独的Blob实体(它只有一个id +数据字段)并与您的实体“一对一”引用它,这样您就可以延迟加载它而不会出现问题