[ https://issues.apache.org/jira/browse/JDO-630?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12702456#action_12702456
]
Craig Russell commented on JDO-630:
-----------------------------------
> All objects returned by the implementation will have exact ids. All ids returned by PM.getObjectId()
will also be exact.
This seems to be the right direction. But there are a few APIs that we should revisit. Here's
a proposal to change the spec but leave the API exactly as it is:
Object getObjectById (Object oid, boolean validate);
Add to the description of validate false:
The user asserts that the oid contains the exact id, so if the object is not in the cache,
the implementation constructs a hollow instance of the class in the oid. If the class is abstract,
throw StupidUserException (we cannot construct a hollow instance of an abstract class). If
the class is actually not correct, an exception with a possibly confusing error message might
be thrown later. Caveat user. Test case needed.
<T> T getObjectById (Class<T> cls, Object key);
This is already described as having identical behavior to pm.getObjectById (pm.newObjectIdInstance
(cls, key), true), so no change.
Object getObjectById (Object oid);
This is already described as having identical behavior to pm.getObjectById(oid, true), so
no change.
Object[] getObjectsById (boolean validate, Object... oids);
This is defined as iterating the oids and calling getObjectById(oid, validate) so no change.
Collection getObjectsById (Collection oids);
This is already described as having identical behavior to pm.getObjecstById(true, oids), so
no change.
> Support specification of exact class in SingleFieldIdentity
> -----------------------------------------------------------
>
> Key: JDO-630
> URL: https://issues.apache.org/jira/browse/JDO-630
> Project: JDO
> Issue Type: Improvement
> Components: api2
> Reporter: Andy Jefferson
> Fix For: JDO 2 maintenance release 3
>
> Attachments: singlefieldidentity_exact.patch
>
>
> When calling PersistenceManager.getObjectById() with a SingleFieldIdentity, there seems
to be no way of avoiding the following
> (if the implementation decides to do so):
> "It is an implementation decision whether to access the data store, if required to determine
the exact class. This will be the case of inheritance, where multiple <code>PersistenceCapable</code>
classes share the same ObjectId class."
> Now when I know for sure that the targetClassName of the given SingleFieldIdentity already
denotes the correct class for the given id, how can I avoid that additional roundtrip to
the database for finding the exact class?
> It would be useful to have a way of specifying a SingleFieldIdentity to be for the exact
class specified. This could be done by addition of methods
> void setExact(boolean flag);
> boolean getExact();
> to SingleFieldIdentity
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
|