ColdFusion ORM创建错误的数据类型

时间:2010-10-06 01:47:30

标签: orm coldfusion

数据库:OS X上的MySql 5.1.47

Application.cfc中的ORM设置:

this.ormEnabled = true;  this.ormsettings = {   autogenmap = true,   dbCreate = application.dbCreate,   automanageSession = true,   datasource = application.dsn,   logSQL = application.logSQL,   sqlScript = application.sqlScript  };

News.cfc

/**
* These are the news items
* @persistent true
* @accessors true
* @output false
* @entityname "News"
* @table news
*/

component
{
 property name="NewsId" type="string" fieldtype="id" ormtype="integer" generator="native" generated="insert";
 property name="Teaser" type="string" sqltype="varchar(200)";
 property name="Story" type="string" sqltype="varchar(500)";
 property name="ProductLineId" type="numeric" sqltype="int" ormtype="int" fieldtype="many-to-one" cfc="ProductLine" fkcolumn="ProductLineId" foreignkeyname="fk_productline_news";

}

ProductLine.cfc

/**
* @persistent true
* @accessors true
* @output false
* @table productline
*/

component
{
 property name="ProductLineId" sqltype="int" fieldtype="id" ;
 property name="Label" type="string" sqltype="varchar(50)";
}

ORMReload()的调试输出

[localhost]:10/05 21:32:00 [jrpp-70] HIBERNATE DEBUG - 
[localhost]:    create table news (
[localhost]:        NewsId integer not null auto_increment,
[localhost]:        Teaser varchar(200),
[localhost]:        Story varchar(500),
[localhost]:        **ProductLineId varchar(255)**,
[localhost]:        primary key (NewsId)
[localhost]:    )
[localhost]:10/05 21:32:00 [jrpp-70] HIBERNATE DEBUG - 
[localhost]:    create table productline (
[localhost]:        ProductLineId int not null,
[localhost]:        Label varchar(50),
[localhost]:        primary key (ProductLineId)
[localhost]:    )
[localhost]:10/05 21:32:01 [jrpp-70] HIBERNATE DEBUG - 
[localhost]:    alter table news 
[localhost]:        add index fk_productline_news (ProductLineId), 
[localhost]:        add constraint fk_productline_news 
[localhost]:        foreign key (ProductLineId) 
[localhost]:        references productline (ProductLineId)

尝试创建外键关系时,数据库创建失败。请注意,news中的字段是varchar(255)。那个是从哪里来的?我试图在我能找到的每个地方将它设置为整数,但它总是作为varchar生成。我认为这就是为什么关系失败的原因,因为这两个字段是不同的数据类型。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

在News.cfc中试试这个:

property name =“productLine”fieldtype =“many-to-one”cfc =“ProductLine”fkcolumn =“ProductLineID”foreignkeyname =“fk_productline_news”

答案 1 :(得分:0)

您是否需要在ProductLine.cfc中的ProductLineID属性上使用ormtype?我注意到你在一个地方有“ormtype = int”,而另一个地方有ormtype =整数。

答案 2 :(得分:0)

以下是我为使这项工作正常运行所采取的步骤。

  1. 小心tablename案例     ColdFusion / MySql / OS X.它可以     真的杀了orm。会发生什么     如果错误的案件处理是     用于配置MySql,Orm会     放一张桌子然后却无法     重新创建它,因为仍然是MySql     认为表存在,但有一个     不同的情况。这可以     特别令人沮丧的是     MySql工具实际上不会     用错误显示表格     case,但你仍然可以查询它。     这是MySql的一个已知问题     球队。我的建议是供应     表的所​​有小写名称     并设置你的MySql表格案例     配置选项为1(存储在     小写,不区分大小写)。那     似乎对我有用。

  2. 确保你设置方言 “MySQLwithInnoDb”的选项

  3. 在所有键上设置ormtype。

  4. 坚持使用int或integer并始终如一地使用它。我选择了整数。

  5. 偶尔重启所有内容/重新启动。

  6. 我从News.cfc中取出了外键引用的sqltype

  7. 在我完成所有这些之后,它终于开始按预期工作了。

    这是我的最终News.cfc

    /**
    * Theser are the news items on the home page.
    * @persistent true
    * @accessors true
    * @output false
    * @entityname "News"
    * @table news
    */
    
    component
    {
        property name="NewsId" type="string" fieldtype="id" ormtype="integer" generator="native" generated="insert";
        property name="Teaser" type="string" sqltype="varchar(200)";
        property name="Story" type="string" sqltype="varchar(500)";
        property name="ProductLine" fieldtype="many-to-one" cfc="ProductLine" ormtype="integer" fkcolumn="ProductLineId" foreignkeyname="fk_productline_news";
    
    }