我的数据库结构主要由每个表的多个主键组成,因此每个连接需要多个列。我试图使用ColdFusion(11具体)ORM collection property。似乎fkColumn
属性中以逗号分隔的列列表不起作用,就像relationship properties一样。我有filed a bug with Adobe,但我想知道是否有其他人遇到此问题并找到了解决方法。或许我只是做错了..
表格设置
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]An expression of non-boolean type specified in a context where a condition is expected, near ','.
看一下生成的查询,似乎没有为where
子句正确解析列的列表,但它有点理解select
表达式中有多列。 / p>
select
sites0_.StaffID,
YearID as StaffID1_2_0_,
sites0_.SiteID as SiteID4_0_
from
StaffSites sites0_
where
sites0_.StaffID,YearID=?
目标
要使ORM集合属性正确支持多键" join"。为什么不使用关系?我想使用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"},
]
}
答案 0 :(得分:0)
对于您的数据库结构,转换为ORM的最简单方法是将“StaffSites”用作linktable
用于多对多关系。
您应该尝试使用CF11的自定义序列化程序http://blogs.coldfusion.com/post.cfm/language-enhancements-in-coldfusion-splendor-improved-json-serialization-2