As a user, here's what I would expect to work:


        @PersistenceCapable(table="person")
        public interface Person {}

        @PersistenceCapable(table="person")
        public class MyPerson implements Person {}


        public class Main {
                public static void main(String... args) {
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("pmf.properties");
                        PersistenceManager pm = pmf.getPersistenceManager();
                        
                        pm.currentTransaction().begin();
                        pm.makePersistent(new MyPerson());  // persist the 
concrete type
                        pm.currentTransaction().commit();

                        Query query = pm.newQuery(Person.class);  // query by 
the interface
                        query.setUnique(true);
                        Person person = (Person)query.execute();

                        assert person instanceof MyPerson == true;
                }       
        }

This does not work, however (at least with JPOX). My instanceof assertion at bottom fails, because person is actually a type generated by the implementation (PersonImpl in the case of JPOX). While I understand that this class generation approach may have some uses, I'm actually dealing with I believe is a much simpler use case that doesn't seem to be supported: I simply want to be able to persist an instance of a concrete type and subsequently query for that object by it's interface.

Am I missing something? Note that I'm not looking for any JPOX- specific tips here; just some guidance on usage per the spec.

Thanks,

- Chris

Chris Beams







Reply via email to