The database is very tightly bound to Java types. It started as a simple way to index ``back pointers'' rather than storing lists of back pointers explicitly in objects. The more I added relational-like features to it, though, the more I realized that relational semantics are enough significantly different than object semantics that the two do not blend as well as one would hope.
The database supports indexing for fast lookups.