【发布时间】:2016-05-02 06:03:18
【问题描述】:
我有这个实体,我想为每个设备列出属性 message = 1 的最后一个事件
@Entity
@Table(name = "t_device_event")
@NamedQueries(value = {
@NamedQuery(name = "DeviceEvent.findWithMessageActive",
query = "from DeviceEvent as de1 where de1.message = 1 and de1.received = "
+ " ( select max(de2.received) from DeviceEvent de2 "
+ " where de2.device.id = de1.device.id ) "), )
public class DeviceEvent {
..
}
但我在最后一个测试中遇到了一个断言问题,因为它认为device3 是最后一个事件,而事实并非如此。
assertTrue ((numDevicesWithActiveMessage+1) == deviceEventService.findWithActiveMessage().size());
DeviceEvent deviceEvent3 = newDeviceEvent();
deviceEvent3.setMessage(1);
deviceEventService.save(deviceEvent3);
DeviceEvent deviceEvent4 = newDeviceEvent();
deviceEventService.save(deviceEvent4);
assertTrue ((numDevicesWithActiveMessage+1) == deviceEventService.findWithActiveMessage().size());
【问题讨论】:
-
您能否在
DeviceEvent.findWithMessageActive()上提供您的注释,说明您在哪里设置received以及预期结果? -
我认为你应该添加 deviceEvent4.setMessage(1);因为这段代码 assertTrue ((numDevicesWithActiveMessage+1) == deviceEventService.findWithActiveMessage().size());正在寻找活动消息,但 device4 没有任何消息。因此,最新的是 device3。这对你有帮助吗?