如何在数据库中使用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形式。

+0

问题是什么? –

+0

问题是如何更新除密码字段以外的所有字段。密码字段不能被覆盖。 – sakul

如果要更新让我们说只有一个字段,那么你可以写的另一种方法,在你的仓库@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")