使用Ebean和Play框架将条件放在List字段上

时间:2015-12-13 12:49:52

标签: playframework playframework-2.0 playframework-2.3 ebean

我有一个Device类和一个Event类,如下所示:

    @Entity
    public class Device extends Model {

        @Id
        public Long id;

        @OneToMany(mappedBy = "device")
        public List<Event> events = new ArrayList<Event>();

        ...
    }

    @Entity
    public class Event extends Model {

        @Id
        public Long id;

        @Constraints.Required
        @Formats.DateTime(pattern = "dd-MM-yyyy HH:mm")
        public Date start;

        @Formats.DateTime(pattern = "dd-MM-yyyy HH:mm")
        public Date end;

        @ManyToOne
        public Device device;

        ...

    }

我想获得在给定Date fromDate to之间没有事件的所有设备的列表(实际页面)。听起来很简单,但我不能用Ebean得到我想要的东西,这就是我认为应该如何工作,但我得到的设备不对,

    Model.Finder<Long, Device> find = new Model.Finder<>(Long.class, Device.class);
    Page<Device> devicePage = find.where()
        .or(
            Expr.lt("events.end", from),
            Expr.gt("events.start", to)
        )
        .orderBy("id asc")
        .findPagingList(10)
        .setFetchAhead(false)
        .getPage(0);

1 个答案:

答案 0 :(得分:2)

.or(
    Expr.and(
        Expr.lt("events.start", from),
        Expr.lt("events.end", from)
    ),
    Expr.and(
        Expr.gt("events.start", to),
        Expr.gt("events.end", to)
    )
)

这个想法是:事件的开始&amp;结束日期必须小于FROM日期或必须大于END日期。