如何在数据库中使用DAO
问题描述:
我有一个用户(员工)数据库如何在数据库中使用DAO
@Entity
@Table(name = "user")
public class User {
public enum Role{
USER,ADMIN
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "first_name", nullable = false)
private String firstName;
@Column(name = "last_name", nullable = false)
private String lastName;
@Column(name = "email", nullable = false, unique = true)
private String email;
@Column(name = "password", nullable = false)
private String password;
@Column(name = "company", nullable = false)
private String company;
private String title;
@Enumerated(EnumType.STRING)
@Column(name = "role", nullable = false)
private Role role = Role.USER;
public User() {
}
public User(String firstName, String lastName, String email, String password, String company, String title)
{
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.password = password;
this.company = company;
this.title = title;
}
更新只有一个字段我有UserDao.java
@Repository
public interface UserDao extends JpaRepository<User,Long> {
User findByEmail(String email);
}
当然UserController.java和
@RequestMapping(value = "/edit-active-user/{email:.+}", method = RequestMethod.GET)
public String editActiveUserAgainGet(@PathVariable String email, Model model) {
System.out.println(email.toString());
User user = userDao.findByEmail(email);
model.addAttribute("user", user);
return "editUser";
}
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public String saveUserAgain(@ModelAttribute User user) {
userDao.save(user);
return "redirect:/";
}
在名为editUser的jsp文件中,我有一个包含例如:
<div class="form-group">
<label class="control-label col-sm-2" for="title">Title:</label>
<div class="col-sm-6">
<input required value="${user.title}" name="title" type="text" id="title" class="form-control" placeholder="Enter your job title" autofocus>
</div>
</div>
根据每个用户的属性没有密码。
在属性更新期间,所有这些属性都会再次保存(甚至其中一些还未更改),但密码为NULL,因为它不是JSP形式。
答
如果要更新让我们说只有一个字段,那么你可以写的另一种方法,在你的仓库@Query
和@Modifying
注释,例如:
@Modifying
@Query("update user u set u.email = ?1 where u.id = ?2")
int setEmail(String email, Long id);
这里的documentation。
答
也许你需要传入hibernate dynamic-update = true。有关详细信息如果通过更新虚假它永远不会在更新中使用,只有在插入你可以阅读以下https://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
UPDATE
@Column(updatable="false")
。
问题是什么? –
问题是如何更新除密码字段以外的所有字段。密码字段不能被覆盖。 – sakul