mam tego podmiotu i chcę listy dla każdego urządzenia ostatnią imprezę z komunikatem property = 1Wybierz wiersz z najbardziej aktualne dla każdego użytkownika z 1 warunku w 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 {
..
}
Ale mam problem twierdzenie w ostatnim teście , ponieważ uważa on device3
za ostatnie zdarzenie, a nie w tym przypadku.
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());
Czy możesz podać swoje adnotacje w 'DeviceEvent.findWithMessageActive()', wyjaśnienie, gdzie ustawić "otrzymał" i oczekiwany wynik? –
Myślę, że powinieneś dodać deviceEvent4.setMessage (1); ponieważ ten kod assertTrue ((numDevicesWithActiveMessage + 1) == deviceEventService.findWithActiveMessage(). size()); szukał aktywnej wiadomości, ale urządzenie4 jej nie ma. Tak więc ostatnim jest urządzenie3. może to ci pomoże. – bipartite