我想延迟加载@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。
答案 0 :(得分:0)
您是否启用了“lazy fetching for propery”?与其他延迟抓取不同,默认情况下禁用
在你的代码中,你调用了2方法,所以我猜hibernate会生成2个查询。 findById方法如何?
答案 1 :(得分:0)
我的解决方案是创建一个单独的Blob实体(它只有一个id +数据字段)并与您的实体“一对一”引用它,这样您就可以延迟加载它而不会出现问题