我们假设我们在两个表employers
和employees
之间有一个普通的父子关系。
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不采用类型参数,但这种需求很常见。可以吗?
答案 0 :(得分:1)
正确答案似乎是来自Virtus Labs的Unicorn。
此库添加了一些工具,可以为您的类使用类型安全的ID,这样您就无法再加入错误的id字段,也不会搞乱映射中的字段顺序。它还提供了一种使用方法创建数据访问层的方法(如查询全部,通过id查询,保存或删除),只需4行代码即可为所有具有此类ID的类创建。