= Type System The Hibernate "type system" is multi-layered.... == JavaTypeDescriptor At the lowest level we have `JavaTypeDescriptor` which describes very rudimentary information about Java types (`Class`). This level makes no distinctions based about the nature of the type. E.g. it does not understand that `Person` is an entity. == JPA type system (SQM) [plantuml,SqmTypeSystem,png] .SqmTypeSystem .... @startuml skinparam handwritten true interface SqmExpressable interface SqmPathSource interface EntityDomainType interface BasicDomainType interface PeristentAttribute interface SingularePersistentAttribute interface PluralPersistentAttribute SqmExpressable <|-- SqmPathSource SqmExpressable <|-- BasicDomainType SqmPathSource <|-- EntityDomainType SqmPathSource <|-- PeristentAttribute PeristentAttribute <|-- SingularePersistentAttribute PeristentAttribute <|-- PluralPersistentAttribute @enduml .... == Mapping model - persisters, etc... todo : document this one