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

Pan*_*man 6 collections coldfusion orm coldfusion-11

我的数据库结构主要由每个表的多个主键组成,因此每个连接需要多个列.我正在尝试使用ColdFusion(11具体)ORM集合属性.似乎该fkColumn属性中以逗号分隔的列列表不起作用,就像它对关系属性一样.我已经向Adobe提交了一个错误,但我想知道是否有其他人遇到过此问题并找到了解决方法.或者也许我只是做错了..

表设置

Years        Staff         StaffSites    Sites
===========  ============  ============  ===========
YearID (PK)  StaffID (PK)  YearID (PK)   SiteID (PK)
YearName     StaffName     StaffID (PK)  SiteName
                           SiteID (PK)
Run Code Online (Sandbox Code Playgroud)

工作人员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';
}
Run Code Online (Sandbox Code Playgroud)

问题

运行生成的查询时出错: [Macromedia][SQLServer JDBC Driver][SQLServer]An expression of non-boolean type specified in a context where a condition is expected, near ','.

看一下生成的查询,似乎没有为where子句正确解析列的列表,但它有点理解select表达式中有多个列.

select
    sites0_.StaffID,
    YearID as StaffID1_2_0_,
    sites0_.SiteID as SiteID4_0_ 
from
    StaffSites sites0_ 
where
    sites0_.StaffID,YearID=?
Run Code Online (Sandbox Code Playgroud)

目标

对于ORM集合属性,以正确支持多键"连接".为什么不使用关系?我想使用ORM对象然后序列化为JSON以用于REST服务.序列化的JSON需要包含关系的ID,而不是实际的关系数据.例如,JSON有效负载应为:

{
    "id": 1234,
    "year": 2015,
    "sites": [1,2,3]
}
Run Code Online (Sandbox Code Playgroud)

而不是像:

{
    "id": 1234,
    "year": 2015,
    "sites": [
        {"id": 1, "name": "Foo"},
        {"id": 2, "name": "Bar"},
        {"id": 3, "name": "Baz"},
    ]
}
Run Code Online (Sandbox Code Playgroud)

Hen*_*nry 0

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

您应该尝试 CF11 的自定义序列化程序http://blogs.coldfusion.com/post.cfm/language-enhancements-in-coldfusion-splendor-improved-json-serialization-2