Instead of creating sql script, we model database table like java class. We get vendor independence, support for sql generation and compilation check for db object names.
public class DBTableEmployee extends DBTableGeneric {
/** Name of table */
public static final String NAME = "EMPLOYEE";
/** Container for column names */
public static class ColumnNames extends DBTableGeneric.ColumnNames{
/** First name */
public static final String FIRST_NAME = "FIRST_NAME";
/** Surname */
public static final String SURNAME = "SURNAME";
/** Hire date */
public static final String HIRE_DATE = "HIRE_DATE";
/** Foreign key to Department */
public static final String DEPARTMENT_ID = "DEPARTMENT_ID";
}
/** Columns */
public static class Columns extends DBTableGeneric.Columns{
/** First name */
public static final DBColumnVarchar FIRST_NAME = new DBColumnVarchar(ColumnNames.FIRST_NAME,Nullability.NULLABLE_FALSE,ColumnLengths.LENGTH_30,null);
/** Surname */
public static final DBColumnVarchar SURNAME = new DBColumnVarchar(ColumnNames.SURNAME,Nullability.NULLABLE_FALSE,ColumnLengths.LENGTH_30,null);
/** Hire date */
public static final DBColumnDate HIRE_DATE = new DBColumnDate(ColumnNames.HIRE_DATE,Nullability.NULLABLE_FALSE,DBColumnDate.DEFAULT_CURRENT_DATE);
/** ID of Department */
public static final DBColumnBigint DEPARTMENT_ID = new DBColumnBigint(ColumnNames.DEPARTMENT_ID,Nullability.NULLABLE_FALSE,null);
static {
DEPARTMENT_ID.setInvisible(true);
}
}
/** Inner class as container for foreign keys */
public static class ForeignKeys extends DBTableGeneric.ForeignKeys{
/** Foreign key department */
public static DBForeignKey FK_DEPARTMENT = new DBForeignKey(null,null,new DBIdentifiedTable(DBTableDepartment.class),Arrays.asList(Columns.DEPARTMENT_ID),Arrays.asList(DBTableDepartment.Columns.ID));
}
/**
* @param schema
*/
public DBTableEmployee(DBSchema schema) {
super(schema, NAME);
}
}