我有一个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 from
和Date 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);
答案 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日期。