I couldn\'t figure out how to cleanly do a tag cloud with JPA where each db entity can have many tags.
E.g
Post can have 0 or more Tags User can have 0 or mo
Is there a better way in JPA than having to make all the entities subclass something like Taggable abstract class?
Let's forget the example :) JPA does support polymorphic associations but the target classes have to be part of an inheritance hierarchy. And here are some more rules of thumb about inheritance strategies:
- SINGLE_TABLE:
- All the classes in a hierarchy are mapped to a single table
- This strategy provides good support polymorphic relationships between entities and queries that cover the entire class hierarchy.
- May contain null fields for some subclass data
- TABLE_PER_CLASS:
- Each class in a hierarchy mapped to a separate table and hence, provides poor support for polymorphic relationships
- requires SQL union or separate SQL queries for each subclass
- JOINED
- no null fields => compact data
- This provides good support for polymorphic relationships, but requires one or more join operations – may result in poor performance
In short, if your subclasses declare relatively few properties, prefer the SINGLE_TABLE strategy. If not, use a JOINED strategy unless you have a deep hierarchy (in which case the cost of joins may become more expensive than unions and then TABLE_PER_CLASS would be "less worse").