Предположим, у нас есть обычная связь между родителями и дочерними элементами между двумя таблицами, employers
и employees
.Можно ввести UUIDs?
Поле employerId
в employees
действительно сравнима только id
в employers
(и employerId
в других таблицах). В интересах безопасности типов, я хотел бы представить employers
в
class Employees(tag: Tag) extends Table[Employees](tag, "employees") {
def id = column[UUID[Employees]]("id")
def employerId = column[UUID[Employers]]("employerId")
...
}
Сравнивая UUID[Employers]
колонки к чему-либо другому, чем другому UUID[Employers]
колонка, или с помощью любого сравнения, кроме равенства было бы бессмысленно (в большинстве схем, в том числе шахты), и я хотел бы зафиксировать этот факт во время компиляции.
Очевидно, что реальный UUID не принимает параметр типа, но эта потребность является общей. Это можно сделать?
Что касается использования класса контейнера/оболочки, _e.g._ класс case, который содержит UUID внутри, но который для целей использования кода сам является идентификатором? Вы получите тип проверки, который вам нравится, но для использования скрытого/завернутого UUID вам потребуется сделать небольшую дополнительную работу с точки зрения доступа. – Castaglia
@Castaglia - Я искал конкретный тип _existing_ или тип-библиотеку. См. [Мой ответ] (http://stackoverflow.com/a/36338795/238884) ниже. – Malvolio