2

我有一个带有中等文本字段的表的 Hibernate 3 映射。该表有几千条记录,除了中等文本字段外,其他字段根本不包含太多数据。

整个表格需要加载到内存中,除了很少使用的中等文本字段。

虽然我听说过延迟获取注释,但是这段遗留代码使用的是 Hibernate XDoclet,它在其休眠属性定义中没有提到延迟获取:

http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html#@hibernate_property_ 0 _1_

那么有没有办法告诉 Hibernate 只在调用它的 getter 时检索值?

4

2 回答 2

0

Hibernate 默认支持延迟获取,除非 exlplicity 将其设置为 Eager fetching。如果您想了解有关延迟获取的一些想法,请参阅

如果是属性laza加载尝试类似

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping 
> 
<class 
name="db.hibernateSimple.Copay" 
table="EHR_COPAY" 
polymorphism="explicit" 
> 

<id 
name="id" 
column="COPAY_ID" 
type="long" 
unsaved-value="null" 
> 
<generator class="sequence"> 
<param name="table">HIVAL</param> 
<param name="column">NEXT</param> 
<!-- 
To add non XDoclet generator parameters, create a file named 
hibernate-generator-params-Copay.xml 
containing the additional parameters and place it in your merge dir. 
--> 
</generator> 
</id> 

<property 
name="balance" 
type="int" 
column="balance" 
length="10" 
/> 

<property 
name="date" 
type="java.lang.String" 
column="OWNERSHIP_DATE" 
/> 

<property 
name="comments" 
type="java.lang.String" 
column="comments" 
lazy="true" 
/> 

<many-to-one 
name="user" 
class="db.hibernateSimple.User" 
cascade="none" 
outer-join="auto" 
column="USER_ID_SEQ" 
/> 

我从这里提取了上面的内容,我猜你可以得到一些想法

于 2013-05-03T05:44:31.637 回答
0

我尝试lazy=true在 Hibernate 属性上使用,但它不起作用,即使未get编辑该属性,Hibernate 仍会获取整个表。

作为一种解决方法,我删除了 Hibernate 属性并将其替换为 getter 中的 JDBC 查询和 setter 中的 JDBC 语句。

于 2013-05-07T01:03:56.567 回答