2

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

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

  1. 如果“量化”字段为空,则不要将该实体作为结果的一部分返回。
  2. 如果“quantifications”字段不为空,则仅返回集合中所有 Quantification 实体的状态为“已批准”的实体。

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 的版本?

4

1 回答 1

0

关于“未找到方法”的问题,这只是一个命名问题,部分是 Adob​​e CF 上的 ColdBox 的故障。
在这种情况下,请使用别名方法。对于.in(),请isIn()改用。

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

于 2013-12-03T23:02:04.570 回答