私はScala
、Slick
およびPostgres
を使ってアプリケーションを構築しています。私は滑らかなテーブルを生成するためにSlick code generator
を使用しました。データベースのスキーマを既存の滑らかなテーブルと比較する
私は、データベーステーブルスキーマと滑らかなテーブルスキーマが一致していることを確認する方法があるかどうかを知りたいと思っています。例えば
:
class DepartmentTable(_tableTag: Tag) extends Table[Department](_tableTag, Some("base"), "Department") {
val id: Rep[Long] = column[Long]("DepartmentId", O.AutoInc, O.PrimaryKey)
val name: Rep[String] = column[String]("Name", O.Length(50,varying=true))
val shortCode: Rep[String] = column[String]("ShortCode", O.Length(50,varying=true))
def * = ???
def ? = ???
}
Iは、データベーステーブルを変更表に列parentDepartmentId
を追加言うし、次いでスリックテーブルにそれを添加しました。多くの場合、変更スクリプトがテストデータベース上で実行されないため、実行時例外が発生するという問題がありました。
このような問題を回避するために、滑らかなテーブルが実際のpostgresテーブルと一致するかどうかを確認するために何かを実装しようとしていました。それは達成可能ですか?
私は反射を試みましたが、滑らかなテーブルからすべての詳細を得ることはできませんでした。例:実際の列名
Slick Version : 3.0
達成しようとしていることはありますか?
アプリケーションの起動時に、データベーススキーマと滑らかなスキーマを比較する必要があります。
私の計画:
は自分のアプリケーションからすべてのTableQuery /スリックテーブルを取得します
スリックメタ
が持つ滑らかなtablequery構造の比較使用して実際のデータベーススキーマを取得します。実際のデータベース
マキシムが提案したように、私はレジストリを作成し、各テーブルをレジストリに追加することができます。他の方法があるかどうかを確認したいだけです。その理由は、私または他の人が、誤って2つのテーブルクエリをレジストリに追加することを削除した場合、そのテーブルのチェックは行われないということです。私はもっと安全にしようとしていますが、そのような方法が存在するかどうかはわかりません。
Slickの 'Table' **クラス**とテーブルの**構造**と** Slickの' TableQuery'クラスの**インスタンス**を混同しないようにしてください。 Slickの実際のデータベース**テーブル** –