Nuñ*_*ada 13 java sql junit mysqli jpa
我有这个实体,我想为每个设备列出属性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 {
..
}
Run Code Online (Sandbox Code Playgroud)
但是在最后一次测试中我有一个断言问题,因为它认为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());
Run Code Online (Sandbox Code Playgroud)
我假设DeviceEvent.received在newDeviceEvent()方法中设置,它设置为当前时间.
在这种情况下,创建之间没有延迟,deviceEvent3并且deviceEvent4很可能它们将在received现场具有相同的时间.那么该查询将选择最大所有的received,并根据外部条件会选择这两个deviceEvent3和deviceEvent4用于仅仅deviceEvent3将匹配,因为它有message相等1.
所以我相信因为TEST认为device3作为Last事件实际上是正确的(最有可能除非时钟在两个事件的创建之间打勾).
| 归档时间: |
|
| 查看次数: |
539 次 |
| 最近记录: |