2011-11-22 114 views
3

我有一个Hibernate实体有几个是比较胖,但不经常使用的嵌入对象。我想制作嵌入式对象Lazy Loaded,但我最好不要将信息移动到单独的表中。休眠嵌入式对象可以延迟加载吗?

是否有可能,以及如何注释被延迟加载嵌入对象?

回答

3

直接假正经,通过在物体设置属性是你可以

@Basic(fetch=FetchType.LAZY) 

,你也应该阅读 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-fetching-lazyproperties

+0

从API:“避免不必要的列读取以不同的方式,至少对于只读的交易,是使用HQL或条件查询的投影功能。这避免了构建时字节码处理的需要,并肯定是优选的解决方案“。 – ManuPK

+0

我认为你还没有使用遗留数据库,你有50列i.i – osdamv

3

当我从你的问题了解你有一个大对象(或表),你没有要填写的所有属性。 您可以使用HQL或条件查询的投影特征告诉here

下面是一个例子,HQL应该是,

select new com.foo.Bean(b.prop1,b.prop2,...) from Bean b

你也需要在Bean类添加对应的构造。

让我补充一些事情:

  1. lazy在休眠时,它具有获取来自多个表中的数据才有意义。在这里,您可以保存附加查询以便从其他表中获取数据。详细了解lazy设置here。它可能不适用于你的情况,因为你只能从一个表中获取数据。

  2. 我不觉得它是有多个对象来表示同一个表中的数据,仅仅是因为在几列的数据很少使用一个好主意。