Doma-GenのGenタスクでVIEWからエンティティクラスを作るには?
いまだと設定だけでは無理で、2つクラスを作る必要があります。いずれもdoma-gen-x.x.x.jarに依存。設定でViewを含めるかどうか指定できるようにしてもいいですね。
テーブルのメタデータを読み取るクラスを拡張
public class MyTableMetaReader extends TableMetaReader { public MyTableMetaReader(GenDialect dialect, DataSource dataSource, String schemaName, String tableNamePattern, String ignoredTableNamePattern) { super(dialect, dataSource, schemaName, tableNamePattern, ignoredTableNamePattern); } @Override protected List<TableMeta> getDbTableMetas(DatabaseMetaData metaData, String schemaName) throws SQLException { List<TableMeta> results = new ArrayList<TableMeta>(); ResultSet rs = metaData.getTables(null, schemaName, null, new String[] { "TABLE", "VIEW" }); try { while (rs.next()) { TableMeta dbTableMeta = new TableMeta(); dbTableMeta.setCatalogName(rs.getString("TABLE_CAT")); dbTableMeta.setSchemaName(rs.getString("TABLE_SCHEM")); dbTableMeta.setName(rs.getString("TABLE_NAME")); dbTableMeta.setComment(rs.getString("REMARKS")); if (isTargetTable(dbTableMeta)) { results.add(dbTableMeta); } } return results; } finally { JdbcUtil.close(rs); } } }
グローバルファクトリクラスを拡張(上のクラスのインスタンスを返します)
public class MyGlobalFactory extends GlobalFactory { @Override public TableMetaReader createTableMetaReader(GenDialect dialect, DataSource dataSource, String schemaName, String tableNamePattern, String ignoredTableNamePattern) { return new MyTableMetaReader(dialect, dataSource, schemaName, tableNamePattern, ignoredTableNamePattern); } }
ビルドファイルのgenタスクの定義。
<gen dialectName="${dialectName}" driverClassName="${driverClassName}" url="${url}" user="${user}" password="${password}" globalFactoryClassName="example.MyGlobalFactory"> ... </gen>
globalFactoryClassName属性にGlobalFactoryを継承したクラス名を指定します。