Exactly. Essentially it is "List.get(int)" method that loads the page, so once you get an object via this method it is already inflated.

Andrus

On Jun 30, 2010, at 8:40 AM, Andrey Razumovsky wrote:

For getting unresolved list, you can use
PersistentObjectList.getValueDirectly(), if that helps

2010/6/30 Gary Jarrel <[email protected]>

On Wed, Jun 30, 2010 at 1:44 PM, Aristedes Maniatis <[email protected]>
wrote:

If that is happening, then that might be a bug. Could you put logging in
there to identify exactly when you see the SQL query inflating the
record?
Does it happen right after getPersistenceState()?


I've changed the test case to:

List<Role> results = getDataContext().performQuery(s);

assertEquals(5, results.size());

Role r0 = results.get(0);
Role r1 = results.get(1);
assertEquals(PersistenceState.COMMITTED, r0.getPersistenceState());
assertEquals(PersistenceState.COMMITTED, r1.getPersistenceState());

Role r4 = results.get(4);
assertEquals(PersistenceState.HOLLOW, r4.getPersistenceState());

Stepping though the code with a debugger the following happens:

List<Role> results = getDataContext().performQuery(s);

Causes:

SELECT t0.role_id FROM role t0

Role r0 = results.get(0);

Causes

SELECT t0.name, t0.active, t0.role_id FROM role t0 WHERE (t0.role_id =
?) OR (t0.role_id = ?) [bind: 1->role_id:1, 2->role_id:2]

As you said the whole page is inflated rather than a single object

Nothing in the log until:

Role r4 = results.get(4);

Which causes:

SELECT t0.name, t0.active, t0.role_id FROM role t0 WHERE t0.role_id =
? [bind: 1->role_id:5]

Hence once this executes the test fails as r4 is not hollow!

Gary




--
Andrey

Reply via email to