== SQM The Semantic Query Model (SQM) is Hibernate's representation of an HQL or Criteria query's semantic (meaning). This representation is modeled as an "abstract syntax tree" (AST) - meaning it is a structured tree of nodes where each node represrents an atomic piece of the query. E.g. `SqmSelectClause` represents the query's select clause as you might imagine. That `SqmSelectClause` is ultimately a collection of one or more `SqmSelection` references representing the individual selections to be returned from the query (called the domain results). === The Model This SQM model uses the Hibernate domain model, which is Hibernate's extension to the JPA model. This model contains no relational mapping information, it simply describes the domain model in mostly Java terms although it does incorporate "classifications" of the type system. E.g. it understand that `Customer` is an entity, but contains no information about the tables it maps to nor its columns. See the `design/type-system-domain.adoc` design doc. For details about this domain model === Building an SQM === Interpreting an SQM Ultimately Hibernate needs to talk with the database to fulfill these query executions. This is currently a 2-step process. First we convert the SQM into a new AST called the SQL AST. This is an AST that is more "SQL-y". It's nodes are defined in terms of Hibernate's mapping model which is the model that actually does understand the relational mapping. See `design/type-system-mapping.adoc` for details about this model. Part of this conversion step is to resolving domain model references to mapping model references...