在ColdFusion 9.0.2中我试图将实体(发布)中的两个一对一关系\属性(createdBy和modifiedBy)映射到同一个表\ entity(用户)和同一列(userID)我遇到了以下错误:
实体映射中的重复列:发布列:createdBy(应使用insert =“false”update =“false”映射)
当我更改创建者和修改发布的用户时,我需要修改这两种关系。如果我从发布实体中删除其中一个关系,createdBy或modifiedBy,则没有问题,因此看起来CF和/或ORM不喜欢让这两个属性指向另一个实体的同一列。
带有FK约束的SQL
CREATE TABLE posting (
postingID int IDENTITY (1,1) NOT NULL,
name varchar(35) NOT NULL,
createdBy int NOT NULL,
modifiedBy int NOT NULL,
PRIMARY KEY (postingID),
CONSTRAINT fk_postingCreatedBy FOREIGN KEY (createdBy) REFERENCES user(ID),
CONSTRAINT fk_postingModifiedBy FOREIGN KEY (modifiedBy) REFERENCES user(ID)
);
发布关系实体
component persistent="true" table="posting" schema="dbo" output="false" {
// properties
property name="postingID" type="numeric" fieldtype="id" generator="identity";
property name="name" type="string";
// relationships
property name="createdBy" fieldtype="one-to-one" cfc="user";
property name="modifiedBy" fieldtype="one-to-one" cfc="user";
}
用户实体
component persistent="true" table="user" schema="dbo" output="false" {
// properties
property name="userID" column="ID" type="numeric" fieldtype="id" generator="identity";
property name="firstName" type="string";
property name="lastName" type="string";
}
我已经尝试了几件事来解决这个问题无济于事。我也找不到任何有关ColdFusion ORM的帮助,甚至其他语言/ Hibernate使用的问题/帖子我发现与我的具体情况不符。
非常感谢任何帮助或信息!
答案 0 :(得分:1)
尝试:
// relationships
property name="createdBy" fieldtype="one-to-one" cfc="user" fkcolumn="createdBy";
property name="modifiedBy" fieldtype="one-to-one" cfc="user" fkcolumn="modifiedBy";
如果这不起作用,请尝试many-to-one
。它具有较少的限制,更易于使用。
答案 1 :(得分:0)
与之前的答案类似,您可能不希望在这里建立一对一的关系。除非由于某种原因,用户只能发一个帖子。你更可能真的想要多对一。
property name="createdBy" fieldtype="many-to-one" cfc="user" fkcolumn="createdBy";
property name="modifiedBy" fieldtype="many-to-one" cfc="user" fkcolumn="modifiedBy";
这允许每个用户有很多帖子,但每个帖子只有一个用户。