在Haskell/Persistent中使用没有ID列的SQL表

eug*_*enk 5 sql haskell persistent haskell-persistent

我想使用这个简化的模式使用Persistent现有数据库:

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Entity sql=entities
  deriving Show

EntityLink sql=entity_links
  sourceId EntityId
  targetId EntityId
  deriving Show
|]
Run Code Online (Sandbox Code Playgroud)

entities表有一id列,很好.但是,该entity_links表没有一个,我不想添加一个.相反,它有主键(source_id, target_id).每当我想插入一个EntityLink,我得到这个运行时错误:

SqlError {sqlState = "42703", sqlExecStatus = FatalError, sqlErrorMsg = "column \"id\" does not exist", sqlErrorDetail = "", sqlErrorHint = ""}
Run Code Online (Sandbox Code Playgroud)

以下是我插入EntityLink的代码,给出有效的sourceIdtargetId:

      insert $ EntityLink { entityLinkSourceId = sourceId
                          , entityLinkTargetId = targetId
                          }
Run Code Online (Sandbox Code Playgroud)

如何id在Persistent中禁用该类型的列EntityLink

Wil*_*sem 9

您可以使用Primary和指定属于主键的列.喜欢:

EntityLink sql=entity_links
  sourceId EntityId
  targetId EntityId
  Primary sourceId targetId
  deriving Show
Run Code Online (Sandbox Code Playgroud)