jdbi возвращает 0 в @GetGeneratedKeys в обновлении - PullRequest
0 голосов
/ 10 июня 2018

Я сделал приложение dropwizzard, используя jdbi2.Я делаю обновление на моей таблице и аннотировал метод dao, который делает это с @GetGeneratedKeys и возвращает тип int.Документация здесь говорит

Если тип возвращаемого значения int, то значением будет количество измененных строк.В качестве альтернативы, если метод аннотирован @GetGeneratedKeys, тогда возвращаемое значение будет автоматически сгенерированным ключом.Метод вставки возвращает мне правильный 'id'.Но мой метод обновления dao всегда возвращает мне 0. Здесь что-то не так?

Вот моя таблица

CREATE TABLE `User` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`FIRSTNAME` varchar(30) DEFAULT NULL,
`LASTNAME` varchar(30) DEFAULT NULL,
 PRIMARY KEY (`ID`)
 ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

Это мой POJO

@Data
@Builder
@AllArgsConstructor
public class User {

    @JsonProperty
    private int id;
    @JsonProperty
    private String firstName;
    @JsonProperty
    private String lastName;
}

Вот мой класс dao с методом dao для обновления

@RegisterMapper(UserMapper.class)
public interface UserDao  {

    @SqlUpdate("Insert into User (FIRSTNAME, LASTNAME) values (:firstName, :lastName)")
    @GetGeneratedKeys
    int insert(@BindBean User user); //returns correct autogenerated id

    @SqlUpdate("Update User set FIRSTNAME = :firstName," +
            "LASTNAME = :lastName where ID = :id")
    @GetGeneratedKeys
    int update(@BindBean User User); //Shouldn't it return the id of updated user?
}

А вот мой класс ресурсов:

@Path("/user")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public class UserResource {

    UserDao dao;

    public UserResource(UserDao UserDao)
    {
        this.dao = UserDao;
    }

    @POST
    public User add(@Valid User user) {
        int i = dao.insert(user); //returns correct autogenerated id
        user.setId(i);
        return user;
    }

    @PUT
    @Path("/{id}")
    public User update(@PathParam("id") Integer id, @Valid User user) {
        User updateUser = new User(id, user.getFirstName(),user.getLastName());
        int i = dao.update(updateUser); // --> i is always 0, why?
        System.out.println(i);
        return updateUser;
    }

}

Я отправляю запрос с использованием почтальона следующим образом:

Put:  localhost:7466/user/5
Body:(JSON/application/json) {
"firstName": "new_first_name",
"lastName": "new_last_name"
}

Пожалуйста, прокомментируйте, если что-то не понятно.TIA
РЕДАКТИРОВАТЬ: я не должен получить хотя бы количество строк, обновленных здесь?Я получаю 0 всегда.

...