Hi, The default value for Compatibility.getStrictIdentityValues() is false. Does anyone remember the rationale for this? It looks like this is buried in the (non-public) Kodo codebase.
I just ran into a problem in the following scenario: > @Entity > @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) > abstract class Foo { > > @Id String id; > } > > @Entity > class Bar extends Foo { } > > @Entity > class Baz extens Foo { } If I do the following: > em1.getTransaction().begin(); > Bar bar = new Bar(); > bar.id = "aoeu"; > em1.persist(bar); > em1.getTransaction().commit(); > > Baz b = em2.find(Baz.class, "aoeu"); I get a ClassCastException. The problem is that OpenJPA is resolving Baz.class's pk type to the pk type for Foo and then doing a serial lookup for all Foo entities with a matching ID. This hits on the Bar table first, and thus returns a Bar, which fails to cast to Baz. If I toggle StrictIdentityValues to true, the 'right' code in BrokerImpl.newObjectId() is invoked, and everything works beautifully. Now, I can imagine that there are other issues with the old OpenJPA behavior, but I know we put a lot of work into making the intuitive stuff happen in these codepaths. So, I'm trying to figure out why we ended up introducing StrictIdentityValues. Sadly, looking at the svn blame output, it looks like this comes from the original Kodo codebase, whose history I don't have access to anymore. Anyone? Thanks, -Patrick -- Patrick Linskey 202 669 5907