【问题标题】:ColdFusion ORM: sort order for entity relationshipsColdFusion ORM:实体关系的排序顺序
【发布时间】:2011-07-27 11:32:47
【问题描述】:

我有一个应用程序,其中包含许多体育俱乐部,每个俱乐部都有许多联系人。

每个联系人都可以是多种类型中的一种,并且这些类型都有指定的显示顺序。

我想为我的实体关系中的联系人指定此排序顺序,但不知道该怎么做。

为了澄清一点,这里是我的三个(简化的)实体 CFC:

club.cfc

component persistent="true" table="clubs"
{
    // identifier
    property name="clubid" fieldtype="id" setter="false" generator="identity";

    // properties
    property name="clubname";

    // relationships
    property name="contacts" cfc="contact" singularname="contact" fieldtype="one-to-many" fkcolumn="clubid";
}

contact.cfc

component persistent="true" table="contacts"
{
    // identifier
    property name="contactid" fieldtype="id" setter="false" generator="identity";

    // properties
    property name="clubid";
    property name="name";

    //relationships
    property name="contacttype" cfc="contacttype" fieldtype="many-to-one" fkcolumn="type";
}

contacttype.cfc

component persistent="true" table="contacttypes"
{
    // identifier
    property name="type" fieldtype="id" insert="false" update="false";

    // properties
    property name="typename";
    property name="displayorder";    
}

所以,总而言之,我想做的是让俱乐部及其联系人根据contacttype中的displayorder值排序。

建议?

【问题讨论】:

  • 我想知道您是否可以使用 Sam Farmer 对 this question 的建议...看起来这个问题与您的情况相似。

标签: orm coldfusion


【解决方案1】:

在我看来,您需要覆盖 club.cfc 中的 getContacts 才能使用 HQL 进行自定义查找。不幸的是,我不是 HQL 向导,我没有你的数据库来测试这个。但这是我对 HQL 有点疯狂的猜测:

public array getContacts()
{
    return ormExecuteQuery(
        "from club cl, contact co, contacttype ct
         where co.clubid = cl.clubid and cl = :thisClub
         order by ct.displayorder"
        , { thisClub = this }
    );
}

我确定这不对,但希望它能让你开始。

【讨论】:

  • 我刚刚尝试过这个(稍作调整),并让它工作,但问题是它每次运行 getContacts() 时都会触发一个查询,即一次每一次接触。如果我可以通过属性关系和 fetch="join" 来做到这一点,那效率会高得多...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多