Java jdbi在更新的@GetGeneratedKeys中返回0

Java jdbi在更新的@GetGeneratedKeys中返回0,java,dropwizard,jdbi,Java,Dropwizard,Jdbi,我已经使用jdbi2制作了dropwizzard应用程序。我正在对我的表进行更新,并对dao方法进行了注释,该方法使用@GetGeneratedKeys和返回类型int进行更新 如果返回类型为int,则该值将是更改的行数。或者,如果该方法使用@GetGeneratedKeys进行注释,则返回值将是自动生成的键。 insert方法返回正确的“id”。 但是我的dao更新方法总是返回0。这里有什么问题吗 这是我的桌子 CREATE TABLE `User` ( `ID` int(11) NOT NU

我已经使用jdbi2制作了dropwizzard应用程序。我正在对我的表进行更新,并对dao方法进行了注释,该方法使用@GetGeneratedKeys和返回类型int进行更新

如果返回类型为int,则该值将是更改的行数。或者,如果该方法使用@GetGeneratedKeys进行注释,则返回值将是自动生成的键。 insert方法返回正确的“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。

我在这里使用的是mysql数据库.Jdbi项目成员。严格来说,更新中没有生成密钥。这还取决于mysql在更新时的行为——您可能需要一个
RETURNING ID
子句。也可能因为您的更改不会修改任何内容,所以不会返回任何行。尝试将int更改为Integer,看看它是否返回null。@qualidafial我将dao类中的“int update(…)”更改为“Integer update(…)”(并将资源类中的“int I”更改为“Integer I”),但没有任何区别。调试时,i值为null。@qualidafial您能详细说明返回ID的
吗?当我直接在数据库中运行更新查询时,我得到“无错误”;1行受影响。”