После удаления поля, меняется порядок

218
25 марта 2019, 03:20

Ввожу команду и она пишется в репозиторий, и в бд.
id: 1 name: ... time: ...
id: 2 name: ... time: ...
id: 3 name: ... time: ...
Далее, когда введенное время совпадает с текущим удаляю запись из репозитория и бд (например команда 1 и 2 удалена осталось только 3). Но теперь, когда я добавляю 4 и 5 команды, они ложатся вместо удаленных 1 и 2, а если 6 добавить, то она идет по порядку:
id: 5 name: ... time: ...
id: 4 name: ... time: ...
id: 3 name: ... time: ...
id: 6 name: ... time: ...
Вопрос, как сделать так чтобы, после удаления, следующая запись шла по порядку?

Контроллер

@Controller
public class NotificationController
{
    @Autowired
    private CommandRepository commandRepository;
    @GetMapping("/")
    public String command(Model model)
    {
        Iterable<Command> commands = commandRepository.findAll();
        model.addAttribute("commands", commands);
        return "command";
    }
    @PostMapping
    public String add(@RequestParam String name,
                      @RequestParam String message,
                      @RequestParam String time,
                      @RequestParam String notificationType,
                      @RequestParam String extra_params,
                      Model model) throws ParseException {
        Command command = new Command(name, message, time, notificationType, extra_params);
        Date date = new Date();
        if(Helper.checkParams(NotificationType.fromString(notificationType),extra_params) && Helper.getCorrect(time).after(date)) {
            commandRepository.save(command);
        }
        else
        {
            command = null;
            System.err.println("notification type and extra param don't coincide" +
                    " or the specified time has already passed");
        }
        Iterable<Command> commands = commandRepository.findAll();
        model.addAttribute("commands", commands);
        return "command";
    }
}

Сущность

@Entity
@Table(name = "command")
public class Command {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;
    @Column(name = "name")
    private String name;
    @Column(name = "message")
    private String message;
    @Column(name = "time")
    private Date time;
    @Column(name = "notificationType")
    @Enumerated(EnumType.STRING)
    private NotificationType notificationType;
    @Column(name = "extra_params")
    private String extra_params;

Репозиторий

@Repository
public interface CommandRepository extends CrudRepository<Command, Long>
{
    @Query("SELECT id FROM notification.entities.Command")
    List<Long> findId(@Param("id") String id);
    @Query("SELECT name FROM notification.entities.Command")
    List<String> findName(@Param("name") String name);
    @Query("SELECT message FROM notification.entities.Command")
    List<String> findMessage(@Param("name") String message);
    @Query("SELECT time FROM notification.entities.Command")
    List<Date> findTime(@Param("time") String time);
    @Query("SELECT notificationType FROM notification.entities.Command")
    List<NotificationType> findType(@Param("notificationType") String type);
    @Query("SELECT extra_params FROM notification.entities.Command")
    List<String> findParam(@Param("extra_params") String param);
    @Transactional
    void deleteByTime(Date date);
}
Answer 1

Нужно отсортировать строки указав order by

В аннотации @Query

@Repository
public interface CommandRepository extends CrudRepository<Command, Long>
{    
    @Query("SELECT name FROM Command c order by c.id")
    List<String> findName(@Param("name") String name);
}

Или передав Sort в метод findAll

commandRepository.findAll(new Sort(Sort.Direction.ASC, "id"));
READ ALSO
Как записывать и читать отдельные биты из байта

Как записывать и читать отдельные биты из байта

Допустим у меня есть байт, и в нем я хочу хранить 8 boolean'овКак мне читать и записывать отдельные биты в байт? Пожалуйста без битсета, я хочу понять...

155
Разное выравнивание на разных экранах

Разное выравнивание на разных экранах

Есть 2 блока которые на больших экранах нужно отобразить в один ряд с выравниванием содержимого по левому краю, а на маленьких в два ряда и с выравниванием...

169
Не работают события [закрыт]

Не работают события [закрыт]

Почему в данном примере консоль выдаёт ошибку?

167