Slick 代码生成器 - 主键作为选项
Slick code generator - primary key as option
我在 Play for scala 2.4 中使用灵活的代码生成器从 SQL 数据库生成 classes。我想知道如何使用定义为 Option
的主键生成代码,因此当我插入新记录时,我可以放置 None
而不是主键。
假设我有一个 table
OrderItem
----------
orderItemId: int
name: varchar
现在我必须像这样创建实例:
val item = new OrderItem(0, "Item name")
db.run(orderItems += item)
有效,但零只是奇数,所以我的目标是
val item = new OrderItem(None, "Item name")
db.run(orderItems += item)
这可能吗?使用 Option[Int]
类型的 PK,我也应该能够重用这个 class 例如用于表单映射。
根据 example in slick documentation 只需将 rawType
更改为
override def rawType = {
if (model.options.contains(ColumnOption.PrimaryKey)) {
"Option[" + super.rawType + "]"
} else {
super.rawType
}
}
更新
我的问题是重复的:Customizing Slick Generator
Slick 代码生成器已经实现了这个:
new SourceCodeGenerator(model){
override def Table = new Table(_){
override def autoIncLastAsOption = true
}
}
我在 Play for scala 2.4 中使用灵活的代码生成器从 SQL 数据库生成 classes。我想知道如何使用定义为 Option
的主键生成代码,因此当我插入新记录时,我可以放置 None
而不是主键。
假设我有一个 table
OrderItem
----------
orderItemId: int
name: varchar
现在我必须像这样创建实例:
val item = new OrderItem(0, "Item name")
db.run(orderItems += item)
有效,但零只是奇数,所以我的目标是
val item = new OrderItem(None, "Item name")
db.run(orderItems += item)
这可能吗?使用 Option[Int]
类型的 PK,我也应该能够重用这个 class 例如用于表单映射。
根据 example in slick documentation 只需将 rawType
更改为
override def rawType = {
if (model.options.contains(ColumnOption.PrimaryKey)) {
"Option[" + super.rawType + "]"
} else {
super.rawType
}
}
更新
我的问题是重复的:Customizing Slick Generator
Slick 代码生成器已经实现了这个:
new SourceCodeGenerator(model){
override def Table = new Table(_){
override def autoIncLastAsOption = true
}
}