Java 如何在SpringMVC中使用Hibernate和SpringJPA更新数据

Java 如何在SpringMVC中使用Hibernate和SpringJPA更新数据,java,hibernate,spring-mvc,jpa,spring-data-jpa,Java,Hibernate,Spring Mvc,Jpa,Spring Data Jpa,首先,我只是一个喜欢学习Spring框架的初学者。我正在使用springmvc和Hibernate和springjpa创建简单的在线国内航班预订系统。当我要更新注册用户的姓名、电子邮件和联系方式时,会出现此问题 my-profile.jsp(更新user.jsp的链接) UserService.java public void save(User user) { user.setEnabled(true); BCryptPasswordEncoder encoder = new

首先,我只是一个喜欢学习Spring框架的初学者。我正在使用
springmvc
Hibernate
springjpa
创建简单的在线国内航班预订系统。当我要更新注册用户的姓名、电子邮件和联系方式时,会出现此问题

my-profile.jsp(更新user.jsp的链接)

UserService.java

public void save(User user) {
    user.setEnabled(true);
    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
    user.setPassword(encoder.encode(user.getPassword()));

    List<Role> roles = new ArrayList<Role>();
    roles.add(roleRepository.findByName("ROLE_USER"));
    user.setRoles(roles);
    userRepository.save(user);      
}

public User findOne(String name) {
    return userRepository.findByName(name);
}
当我运行这个程序时,数据库中没有发生任何变化。而且,我不能使用新凭据或使用以前的凭据登录

我感谢你帮我查清这个案子。我需要更新现有用户。他的姓名、电子邮件和联系电话。我能做些什么来解决这件事

角色
实体

@Entity
public class Role {

    @Id
    @GeneratedValue
    private Integer id;
    private String name;

    @ManyToMany(mappedBy="roles")
    private List<User> users;

    getters and setters
@Entity
@Table(name = "myUser")
public class User {

@Id
@GeneratedValue
private Integer id;
private String userId;

@Size(min=4, message="Name must be at least 4 characters.")
@UniqueUsername(message="Username exists")
@Column(unique=true)
private String name;

@Size(min=5, message="Password must be at least 5 characters.")
private String password;

@Size(min=1, message="Invalid email")
@Email(message="Invalid email")
@UniqueEmail(message="Email exists")
private String email;
private String contactNum;  
private Boolean enabled;

@ManyToMany
@JoinTable
private List<Role> roles;

getters & setters

你在哪里做更新?在您的控制器中,您只是从数据库中获取用户,然后立即保存它

User user3=userService.findOne(名称);
userService.save(user3)

你应该用新数据更新user3。 我会这样做

User user3=userService.findOne(名称);
updateUser(user3,user);
userService.save(user3)

updateUser方法:

private void updateUser(旧用户、新用户){
setName(newUser.getName());
setEmail(newUser.getEmail());
oldUser.setContactNum(newUser.getContactNum())

}

您在哪里进行更新?在您的控制器中,您只是从数据库中获取用户,然后立即保存它

User user3=userService.findOne(名称);
userService.save(user3)

你应该用新数据更新user3。 我会这样做

User user3=userService.findOne(名称);
updateUser(user3,user);
userService.save(user3)

updateUser方法:

private void updateUser(旧用户、新用户){
setName(newUser.getName());
setEmail(newUser.getEmail());
oldUser.setContactNum(newUser.getContactNum())

}

您在哪里进行更新?在您的控制器中,您只是从数据库中获取用户,然后立即保存它

User user3=userService.findOne(名称);
userService.save(user3)

你应该用新数据更新user3。 我会这样做

User user3=userService.findOne(名称);
updateUser(user3,user);
userService.save(user3)

updateUser方法:

private void updateUser(旧用户、新用户){
setName(newUser.getName());
setEmail(newUser.getEmail());
oldUser.setContactNum(newUser.getContactNum())

}

您在哪里进行更新?在您的控制器中,您只是从数据库中获取用户,然后立即保存它

User user3=userService.findOne(名称);
userService.save(user3)

你应该用新数据更新user3。 我会这样做

User user3=userService.findOne(名称);
updateUser(user3,user);
userService.save(user3)

updateUser方法:

private void updateUser(旧用户、新用户){
setName(newUser.getName());
setEmail(newUser.getEmail());
oldUser.setContactNum(newUser.getContactNum())



}

您不需要在某个地方提交吗?您的UserRepository的具体实现在哪里?您不需要实现
UserRepository
,因为您使用的是Spring Data JPA。我首先建议您启用参数日志记录和查询日志记录,这样您就可以清楚地了解正在发生的事情。退房更具体地说,对于logback,您需要添加
我想我需要更多地了解
Spring JPA
@Geo,我搜索了很多,以找到我问题的答案。非常感谢您的建议。@RYJ不客气!你不需要在那里的某个地方提交吗?您的UserRepository的具体实现在哪里?您不需要实现
UserRepository
,因为您使用的是Spring Data JPA。我首先建议您启用参数日志记录和查询日志记录,这样您就可以清楚地了解正在发生的事情。退房更具体地说,对于logback,您需要添加
我想我需要更多地了解
Spring JPA
@Geo,我搜索了很多,以找到我问题的答案。非常感谢您的建议。@RYJ不客气!你不需要在那里的某个地方提交吗?您的UserRepository的具体实现在哪里?您不需要实现
UserRepository
,因为您使用的是Spring Data JPA。我首先建议您启用参数日志记录和查询日志记录,这样您就可以清楚地了解正在发生的事情。退房更具体地说,对于logback,您需要添加
我想我需要更多地了解
Spring JPA
@Geo,我搜索了很多,以找到我问题的答案。非常感谢您的建议。@RYJ不客气!你不需要在那里的某个地方提交吗?您的UserRepository的具体实现在哪里?您不需要实现
UserRepository
,因为您使用的是Spring Data JPA。我首先建议您启用参数日志记录和查询日志记录,这样您就可以清楚地了解正在发生的事情。退房更具体地说,对于logback,您需要添加
我想我需要更多地了解
Spring JPA
@Geo,我搜索了很多,以找到我问题的答案。非常感谢您的建议。@RYJ不客气!我的想法完全一样,应该是userService.save(user)@阿努加德还是那样。我更喜欢用新数据更新现有实体。我认为
userService.save(user3)
也可以用新值进行更新。我如何更新@arados?我通常创建更新方法
private void update(oldEntity,newEntity){oldEntity.setSomething(newEntity.getSomething())}
我已经更新了我的答案更多的代码。我希望能有帮助。我也这么想,我
public void save(User user) {
    user.setEnabled(true);
    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
    user.setPassword(encoder.encode(user.getPassword()));

    List<Role> roles = new ArrayList<Role>();
    roles.add(roleRepository.findByName("ROLE_USER"));
    user.setRoles(roles);
    userRepository.save(user);      
}

public User findOne(String name) {
    return userRepository.findByName(name);
}
public interface UserRepository extends JpaRepository<User, Integer> {
    User findByName(String name);
}
Hibernate: select user0_.id as id1_4_, user0_.contactNum as contactN2_4_, user0_.email as email3_4_, user0_.enabled as enabled4_4_, user0_.name as name5_4_, user0_.password as password6_4_, user0_.userId as userId7_4_ from myUser user0_ where user0_.name is null
Hibernate: select user0_.id as id1_4_, user0_.contactNum as contactN2_4_, user0_.email as email3_4_, user0_.enabled as enabled4_4_, user0_.name as name5_4_, user0_.password as password6_4_, user0_.userId as userId7_4_ from myUser user0_ where user0_.email is null
Hibernate: select user0_.id as id1_4_, user0_.contactNum as contactN2_4_, user0_.email as email3_4_, user0_.enabled as enabled4_4_, user0_.name as name5_4_, user0_.password as password6_4_, user0_.userId as userId7_4_ from myUser user0_ where user0_.name=?
Hibernate: select user0_.id as id1_4_, user0_.contactNum as contactN2_4_, user0_.email as email3_4_, user0_.enabled as enabled4_4_, user0_.name as name5_4_, user0_.password as password6_4_, user0_.userId as userId7_4_ from myUser user0_ where user0_.email=?
Hibernate: select user0_.id as id1_4_, user0_.contactNum as contactN2_4_, user0_.email as email3_4_, user0_.enabled as enabled4_4_, user0_.name as name5_4_, user0_.password as password6_4_, user0_.userId as userId7_4_ from myUser user0_ where user0_.name=?
Hibernate: select role0_.id as id1_3_, role0_.name as name2_3_ from Role role0_ where role0_.name=?
Hibernate: update myUser set contactNum=?, email=?, enabled=?, name=?, password=?, userId=? where id=?
Hibernate: delete from myUser_Role where users_id=?
Hibernate: insert into myUser_Role (users_id, roles_id) values (?, ?)
@Entity
public class Role {

    @Id
    @GeneratedValue
    private Integer id;
    private String name;

    @ManyToMany(mappedBy="roles")
    private List<User> users;

    getters and setters
@Entity
@Table(name = "myUser")
public class User {

@Id
@GeneratedValue
private Integer id;
private String userId;

@Size(min=4, message="Name must be at least 4 characters.")
@UniqueUsername(message="Username exists")
@Column(unique=true)
private String name;

@Size(min=5, message="Password must be at least 5 characters.")
private String password;

@Size(min=1, message="Invalid email")
@Email(message="Invalid email")
@UniqueEmail(message="Email exists")
private String email;
private String contactNum;  
private Boolean enabled;

@ManyToMany
@JoinTable
private List<Role> roles;

getters & setters