The DBTable attribute (Location class)

The [ DBTable ] attribute controls where class instances are persisted. The domain class attributed with [ DBTable ] and all their children get their own class. This mechanism is explained briefly here: FIXME, a more comprehensive discussion is the section FIXME in the PhoneBook tutorial.

For this PhoneBook sample, our hierarchy is boring – no subclassing of domain object classes here. We give each class it's own [ DBTable ] attribute, thus its own table:

We don't have many options here, but an alternative would be to introduce an abstract base type PhoneBookBase, derive all PhoneBook domain classes from it and persist them all in the same table:

As you see, the three sub-classes inherit the DBTable attribute from abstract PhoneBookBase class. They share a DBTable attribute, so they share a table. The column names are merged. For this scenario it is useful to have that DBColumn}}mentioned above, by the way. Without it, we would get column name clashes, because both the {{Location class has a property Number, but also the PhoneNumber class.