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