Coldfusion Hibernate - 按集合内的字段值过滤结果

时间:2013-11-16 21:00:51

标签: hibernate coldfusion coldbox

我有一个有多个字段的实体;其中一个领域是“量化”,它包含不同实体的集合。

我在API控制器调用中查询此实体,该调用通过JSON返回列表。我想通过以下标准过滤我返回的结果集:

  1. 如果“quantulations”字段为空,请不要将该实体作为结果的一部分返回。
  2. 如果“quantulations”字段不为空,则仅返回集合中所有Quantification实体的状态为“已批准”的实体。
  3. Coldfusion不是我非常熟悉的语言。我有以下符合第一个标准的代码:

    var EventCriteria = EventService.newCriteria();
    EventCriteria.isNotEmpty('quantifications');
    

    如何检查第二个标准?谢谢。

    修改 好的,我一直在尝试一些事情,而且我遇到了“找不到方法”错误。发布以下代码。

    if (NOT showEventsWithoutQuantifications){
        EventCriteria.isNotEmpty('quantifications');
    
        var eventStatus = eventStatusService.findWhere(entityName="EventStatus", criteria={eventStatusOrder=javaCast( "int", 150 )}); //approved
    
        // According to the Coldbox documentation, this should have worked. It doesn't.
        // var QuantificationService = quantificationService.newCriteria()
        //      .isEq("Quantification.status", eventStatus)
        //      .withProjections(property="event.eventID");
        // EventCriteria.in("eventID", QuantificationService); // .in() method not found. Why?
        // EventCriteria.add(EventCriteria.restrictions.in("eventID", QuantificationService)); // .in() method not found. Why?
    
        EventCriteria.add(wmtEventCriteria.createSubcriteria('Quantifications').isEq("status", eventStatus));  // .createSubcriteria method () method not found. Why?
    }
    

    对于它的价值,EventService继承自coldbox.system.orm.hibernate.VirtualEntityService。我还没有找到该类的代码(因为我没有使用本机CF IDE),但我想这会暴露出有问题的方法......?

    这可能是我正在运行的Hibernate版本的问题吗?或者也许是Coldbox的版本?

1 个答案:

答案 0 :(得分:0)

关于“找不到方法”的问题,它只是一个命名问题,部分是来自Adobe CF上ColdBox的错误。
在这种情况下,请使用别名方法。对于.in(),请改用isIn()

在下面的页面底部,您可以看到不同的别名。 https://github.com/ColdBox/coldbox-platform/blob/master/system/orm/hibernate/criterion/Restrictions.cfc