数据库: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生成。我认为这就是为什么关系失败的原因,因为这两个字段是不同的数据类型。
我做错了什么?
答案 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)
以下是我为使这项工作正常运行所采取的步骤。
小心tablename案例 ColdFusion / MySql / OS X.它可以 真的杀了orm。会发生什么 如果错误的案件处理是 用于配置MySql,Orm会 放一张桌子然后却无法 重新创建它,因为仍然是MySql 认为表存在,但有一个 不同的情况。这可以 特别令人沮丧的是 MySql工具实际上不会 用错误显示表格 case,但你仍然可以查询它。 这是MySql的一个已知问题 球队。我的建议是供应 表的所有小写名称 并设置你的MySql表格案例 配置选项为1(存储在 小写,不区分大小写)。那 似乎对我有用。
确保你设置方言 “MySQLwithInnoDb”的选项
在所有键上设置ormtype。
坚持使用int或integer并始终如一地使用它。我选择了整数。
偶尔重启所有内容/重新启动。
我从News.cfc中取出了外键引用的sqltype
在我完成所有这些之后,它终于开始按预期工作了。
这是我的最终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";
}