Aliases are code-generated classes the hold the column meta-data for tables. This meta-data is then used for both building Type-Safe Queries and also the meta-data-driven loading/saving of primitives into ResultSets and PreparedStatements.
This is all generated code, but the basic idea is that it statically defines the table meta-data found at build-time:
public class ChildAlias extends Alias<Child> {
// The alias keeps a list, columns, of all of its columns
private final List<AliasColumn<Child, ?, ?>> columns =
new ArrayList<AliasColumn<Child, ?, ?>>();
// Some basic primitive columns
public final IdAliasColumn<Child> id =
new IdAliasColumn<Child>(this, "id", ChildCodegen.Shims.id);
public final StringAliasColumn<Child> name =
new StringAliasColumn<Child>(this, "name", ChildCodegen.Shims.name);
public final IntAliasColumn<Child> version =
new IntAliasColumn<Child>(this, "version", ChildCodegen.Shims.version);
// The parent_id foreign key has a specific ForeignKeyAliasColumn
// column with the "on" join method
public final ForeignKeyAliasColumn<Child, Parent> parent =
new ForeignKeyAliasColumn<Child, Parent>(
this,
"parent_id",
ChildCodegen.Shims.parentId);
public ChildAlias(String alias) {
super(Child.class, "child", alias);
this.columns.add(this.id);
this.columns.add(this.name);
this.columns.add(this.version);
this.columns.add(this.parent);
}
// Common Alias columns used by the meta-data mapper
public List<AliasColumn<Child, ?, ?>> getColumns() {
return this.columns;
}
public IdAliasColumn<Child> getIdColumn() {
return this.id;
}
public IntAliasColumn<Child> getVersionColumn() {
return this.version;
}
public IdAliasColumn<Child> getSubClassIdColumn() {
return null;
}
// To avoid foreign key conflicts (only for mysql), entities
// are topographically sorted at build-time and given a
// hardcoded insert order to be used during UoW.flush
public int getOrder() {
return 21;
}
}