This is pretty much done. The only identifier-related piece to do
still is support for @MapsId.
Part of this process was introducing the notion of synthetic
attributes, which are attributes which don't really exist in the domain
classes. HIbernate uses them for a number of things. Here, it was
needed for handling "non-aggregated composite identifiers" (composite
ids that are not represented by a @EmbeddedId). The important take
away is that in the metamodel now identifiers ALWAYS are represented as
a single attribute. In the case of
single attribute is a real attribute; in the case of
org.hibernate.id.EntityIdentifierNature#COMPOSITE the attribute is
On Wed 11 Apr 2012 04:03:22 PM CDT, Steve Ebersole wrote:
The main pieces of identifier handling are in place now on the
metamodel branch. Probably still needs some work in terms of building
persisters, etc but what doesn't on that branch ;)
Anyway, one thing in particular I was hoping to get a discussion on is
the org.hibernate.metamodel.spi.binding.EntityIdentifier class. The
javadocs kind of tell the story, but basically it represents a dual
contract (single versus multiple attribute identifiers).
If anyone has time to take a look and give feedback that would be great!