Tôi có Entity này và tôi muốn liệt kê cho mỗi thiết bị sự kiện cuối cùng với thông điệp hữu = 1Chọn hàng với ngày gần đây nhất cho mỗi người dùng với 1 điều kiện trong JPA
@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 {
..
}
Nhưng tôi có một vấn đề khẳng định trong thử nghiệm cuối cùng, bởi vì nó xem xét device3
là sự kiện cuối cùng và không phải sự kiện đó.
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());
Bạn có thể cung cấp chú thích của mình trên 'DeviceEvent.findWithMessageActive()', giải thích về nơi bạn đặt 'đã nhận' và kết quả mong đợi không? –
Tôi nghĩ bạn nên thêm deviceEvent4.setMessage (1); vì mã này assertTrue ((numDevicesWithActiveMessage + 1) == deviceEventService.findWithActiveMessage(). size()); đang tìm kiếm một tin nhắn hoạt động nhưng device4 không có bất kỳ thông điệp nào. Vì vậy, cái mới nhất là device3. điều này có thể giúp bạn. – bipartite