[ https://issues.apache.org/jira/browse/JDO-483?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12878531#action_12878531 ]
Andy Jefferson commented on JDO-483: ------------------------------------ DataNucleus already provides something related. See http://datanucleus.svn.sourceforge.net/viewvc/datanucleus/platform/core/trunk/src/java/org/datanucleus/jdo/NucleusJDOHelper.java?revision=9230&view=markup String[] NucleusJDOHelper.getDetachedObjectLoadedFields(Object obj, PersistenceManager pm); String[] NucleusJDOHelper.getDetachedObjectDirtyFields(Object obj, PersistenceManager pm); > Add JDOHelper.isLoaded methods > ------------------------------ > > Key: JDO-483 > URL: https://issues.apache.org/jira/browse/JDO-483 > Project: JDO > Issue Type: Improvement > Components: api, api2-legacy > Affects Versions: JDO 2 maintenance release 1 > Reporter: Matthew T. Adams > > I'm putting forth a proposal to add a method to JDOHelper that allows users > to determine whether or not a given object's field is loaded. There are two > options to handle implementations that won't/can't support loaded field > checking, especially when detached (essentially binary compatible v. > non-binary compatible implementations). Option A adopts an approach that > uses Boolean objects instead of primitives, leaving null as a return value > for implementations that won't/can't support it. Option B takes an > exception-based approach and uses boolean primitives. I'm not sure which I > prefer; let's discuss. > > <proposal option="A"> > > JDOHelper > > Checking whether fields are loaded > > In some use cases, an application may need to know whether or not a given > field is loaded, for example when marshaling data from detached objects to > data transfer objects (DTOs). > > Transient fields > > Transient fields are always considered loaded. > > Implementation support > > Some implementations may not be able to support the ability to check the > loaded status of a field, especially when the object is detached. If the > implementation does not support checking whether a field is loaded, then it > must return null from the isLoaded methods. > > Boolean isLoaded(String fieldName, Object pc); > > If the field in the most-derived class of the given object's class identified > by the given name is loaded in the given object, Boolean.TRUE is returned. > If the field is not loaded, Boolean.FALSE is returned. If the given field > name is not declared by the given object's class or its direct or indirect > superclasses, then JDOUserException is thrown. If the implementation does > not support checking the loaded state of a field, null is returned. This > method is equivalent to calling isLoaded(fieldName, pc, pc.getClass()); > > Boolean isLoaded(String fieldName, Object pc, Class c); > > This method exists to support the case where a class hides fields defined in > a superclass and an application wants to determine the loaded state of the > field in the superclass. In most cases, the given Class, c, will be > identical to the class of the given object, pc (that is, c == pc.getClass() > will return true). If the class of the given object, pc, is a subclass of > the given Class, c, then the loaded state of the field defined on c is given. > If the given Class c is not identical to the class of or a superclass of the > given object, pc, then JDOUserException is thrown. If the given Class > represents an interface, then JDOUserException is thrown. > > If the field of the given class is loaded, Boolean.TRUE is returned. If the > field is not loaded, Boolean.FALSE is returned. If the implementation does > not supporting checking the loaded state of a field, null is returned. > > </proposal> > > <proposal option="B"> > > JDOHelper > > Checking whether fields are loaded > > In some use cases, an application may need to know whether or not a given > field is loaded, for example, when marshaling data from detached objects to > data transfer objects (DTOs). > > Transient fields > > Transient fields are always considered loaded. > > Implementation support > > Some implementations may not be able to support the ability to check the > loaded status of a field, especially when the object is detached. If the > implementation does not support checking whether a field is loaded, then it > must throw JDOUnsupportedOperationException from the isLoaded methods. > > boolean isLoaded(String fieldName, Object pc); > > If the field in the most-derived class of the given object's class identified > by the given name is loaded in the given object, true is returned, otherwise > false is returned. If the given field name is not defined by the given > object's class or its direct or indirect superclasses, then a > JDOUserException is thrown. If the implementation does not support checking > the loaded state of a field, JDOUnsupportedOptionException is thrown. This > method is equivalent to calling isLoaded(fieldName, pc, pc.getClass()); > > boolean isLoaded(String fieldName, Object pc, Class c); > > This method exists to support the case where a class hides fields defined in > a superclass and an application wants to determine the loaded state of the > field in the superclass. In most cases, the given Class, c, will be > identical to the class of the given object, pc. If the class of the given > object, pc, is a subclass of the given Class, c, then the loaded state of the > field defined on c is given. If the given Class c is not identical to the > class and is not a superclass of the given object, pc, then a > JDOUserException is thrown. If the given Class represents an interface, then > JDOUserException is thrown. > > If the field of the given class is loaded, true is returned, otherwise false > is returned. If the implementation does not support checking the loaded > state of a field, JDOUnsupportedOptionException is thrown. > > </proposal> -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.