2016-03-23 2 views
2

2つのテーブルの間に通常の親子関係があるとしましょう(employersemployees)。 employeesUUIDを入力できますか?

フィールドemployerIdは本当にemployersidに唯一匹敵する(および他のテーブルでemployerIdまで)。型の安全性の利益では、私は別のUUID[Employers]列以外にUUID[Employers]列を比較

class Employees(tag: Tag) extends Table[Employees](tag, "employees") { 
    def id = column[UUID[Employees]]("id") 
    def employerId = column[UUID[Employers]]("employerId") 
... 
} 

としてemployersを表現したい、または平等以外の任意の比較を使用すると、鉱山を含め、ほとんどのスキーマに(無意味だろう)、私はコンパイル時にその事実をキャプチャしたいと思います。明らかに、実際のUUIDは型パラメータをとらないが、この必要性は一般的である。それはできますか?

+0

コンテナ/ラッパークラス_e.g._を使用すると、内部的にUUIDが含まれていますが、コードを消費するためのID自体がケースクラスですか?あなたは好きなタイプのチェックを受け取りますが、アクセッサの面では、含まれた/ラップされたUUIDを使用するためにちょっとした作業が必要になります。 – Castaglia

+0

@Castaglia - 特定の_existing_タイプまたはタイプライブラリを探していました。下記の[私の答え](http://stackoverflow.com/a/36338795/238884)を参照してください。 – Malvolio

答えて

1

正しい答えはVirtus LabsのUnicornのようです。

このライブラリを使用すると、もはやマッピングのフィールドの順序まで悪いidフィールドや混乱に参加することはできませんのでごクラスに対するタイプセーフなIDを使用するためのツールが追加されます。また、このようなIDを持つすべてのクラスに対して、わずか4行のコードでメソッド(すべてのクエリ、IDによるクエリ、保存または削除など)を使用してデータアクセスレイヤを作成する方法を提供します。

関連する問題