dave08
10/10/2023, 6:40 AMToshihiro Nakamura
10/10/2023, 10:03 AMjava.sql.DatabaseMetaData
class may be useful. For example, you can validate the primary key using the following method:
https://docs.oracle.com/en/java/javase/17/docs/api//java.sql/java/sql/DatabaseMetaData.html#getPrimaryKeys(java.lang.S[…]ng.String,java.lang.String)dave08
10/10/2023, 10:21 AMToshihiro Nakamura
10/13/2023, 11:47 PMYou always use generation from the db?No. I meant to say that it is easy for users to perform arbitrary validations. Here is the test code to validate primary keys:
val db = JdbcDatabase("jdbc:h2:mem:example;DB_CLOSE_DELAY=-1")
@Test
fun test() {
for (m in Meta.all()) {
validateMetamodel(m)
}
}
private fun validateMetamodel(m: EntityMetamodel<*, *, *>) {
db.config.session.useConnection { connection ->
val metaData = connection.metaData
val columns = metaData.getPrimaryKeys(m.catalogName(), m.schemaName(), m.tableName()).use { rs ->
buildList {
while (rs.next()) {
add(rs.getString("COLUMN_NAME"))
}
}
}
assertEquals(m.idProperties().map { it.columnName }, columns)
}
}