Collections ColdFusion:具有多个外键的ORM集合

Collections ColdFusion:具有多个外键的ORM集合,collections,orm,coldfusion,coldfusion-11,Collections,Orm,Coldfusion,Coldfusion 11,我的数据库结构主要由每个表的多个主键组成,因此每个联接需要多个列。我正在尝试使用ColdFusion(具体来说是11)。在fkColumn属性中,以逗号分隔的列列表似乎不起作用,就像它对其他列一样。我有,但我想知道是否有其他人遇到过这种情况并找到了解决办法。也许我只是做错了 表格设置 Years Staff StaffSites Sites =========== ============ ============ =========== YearID

我的数据库结构主要由每个表的多个主键组成,因此每个联接需要多个列。我正在尝试使用ColdFusion(具体来说是11)。在
fkColumn
属性中,以逗号分隔的列列表似乎不起作用,就像它对其他列一样。我有,但我想知道是否有其他人遇到过这种情况并找到了解决办法。也许我只是做错了

表格设置

Years        Staff         StaffSites    Sites
===========  ============  ============  ===========
YearID (PK)  StaffID (PK)  YearID (PK)   SiteID (PK)
YearName     StaffName     StaffID (PK)  SiteName
                           SiteID (PK)
员工ORM CFC

component persistent=true table='Staff' {
    property name='id'    column='StaffID'       fieldType='id';
    property name='year'  column='YearID'        fieldType='id';
    property name='sites' elementColumn='SiteID' fieldType='collection' table='StaffSites' fkColumn='StaffID,YearID';
}
问题

运行生成的查询时出错:
[Macromedia][SQLServer JDBC Driver][SQLServer]在“,”附近的预期条件上下文中指定的非布尔类型表达式。

查看生成的查询,似乎没有正确解析
where
子句的列列表,但它多少了解到
select
表达式中有多个列

select
    sites0_.StaffID,
    YearID as StaffID1_2_0_,
    sites0_.SiteID as SiteID4_0_ 
from
    StaffSites sites0_ 
where
    sites0_.StaffID,YearID=?
目标

使ORM集合属性正确支持多键“联接”。为什么不使用关系呢?我希望使用ORM对象序列化为JSON,以便在REST服务中使用。序列化的JSON需要包含关系的ID,而不是实际的关系数据。例如,JSON负载应该是:

{
    "id": 1234,
    "year": 2015,
    "sites": [1,2,3]
}
而不是像:

{
    "id": 1234,
    "year": 2015,
    "sites": [
        {"id": 1, "name": "Foo"},
        {"id": 2, "name": "Bar"},
        {"id": 3, "name": "Baz"},
    ]
}

对于数据库结构,转换为ORM的最简单方法是将“StaffSites”用作多对多关系的
linktable


您应该尝试CF11的自定义序列化程序

关系的问题是,实际的关系数据包含在序列化的JSON中。序列化时,我只需要获取相关的ID,这是收集的理由。@Panman那么为什么要使用ORM呢?:)如果您喜欢处理ID,只需使用好的旧cfquery即可。我仍然希望使用其他ORM功能;搜索、缓存等,这是组织其他业务逻辑的好方法。好的,我将尝试与自定义序列化器路由的关系。我很难弄清楚如何配置属性。你知道我的
sites
属性需要是什么吗?发布一个预期的JSON示例,以便在REST服务中使用。@Henry我已经添加了你要求的示例。谢谢你的意见。我一直在考虑使用ORM钩子手动获取数据“后加载”。一旦我回到这个项目,我会尝试一下。看起来您想要从Staff实体获得这个JSON。对
人员使用自定义序列化程序(CF11中新增),并使用linktable将其余部分设置为一对多或多对多。