ColdFusion ORM将多个一对一外键属性映射到另一个表中的相同PK

时间:2014-04-02 16:43:13

标签: sql-server hibernate orm coldfusion coldfusion-9

在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使用的问题/帖子我发现与我的具体情况不符。

非常感谢任何帮助或信息!

2 个答案:

答案 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";

这允许每个用户有很多帖子,但每个帖子只有一个用户。