自定义主键的持久`toSqlKey`

Posted

技术标签:

【中文标题】自定义主键的持久`toSqlKey`【英文标题】:Persistent `toSqlKey` for custom primary key 【发布时间】:2017-10-24 02:13:46 【问题描述】:

我正在定义以下模型,其中Category 具有Text 类型的非整数主键code

Category
    code Text
    Primary code
    deriving Show Typeable

CategoryTreeNode
    name Text
    code CategoryId Maybe
    lft Int MigrationOnly default=0
    rgt Int MigrationOnly default=0
    deriving Show Typeable

对于没有Primary 定义的模型,我可以使用toSqlKey 将任意Int64s 转换为Key Category。具有自定义主键的模型是否有等效功能?

【问题讨论】:

【参考方案1】:

我通过查看persistent的TH模块找到了答案:

https://github.com/yesodweb/persistent/blob/9396c278fc181fdac4a97c53637700417f41a478/persistent-template/Database/Persist/TH.hs#L857-L858

这一行表明CategoryKey 是通过 TH 生成的,确实如此:

let x :: Key Category
    x = CategoryKey "foobar"

【讨论】:

以上是关于自定义主键的持久`toSqlKey`的主要内容,如果未能解决你的问题,请参考以下文章

如何获得mysql数据库自增长主键的值?

如何修改mysql主键的值为自增

django中model的主键的设置与自增

Oracle间接实现自增主键

mysql自增主键怎么用

mysql自增主键怎么用