Spring Data JPA: Comment mettre à jour un modèle d'élégance?

  1. Mon Modèle, c'est comme cela:

    @Entity
    @Table(name = "user")
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        @Column(name="email")
        private String email;
    
        @Column(name = "weblink")
        private String webLink;
    
        //getter & setter
    }
  2. nous recueillons forme ou de données mobiles via requête http, et spring mvc fera de ces données à un Modèle comme utilisateur.

    par exemple, j'ai une requête comme ceci:

    http://localhost:8080/update?id=1919&[email protected]

  3. dans contolleur, l'url de la requête et de ses paramètres seront automaticlly trans pour une User objet.

    @RequestMapping(method = RequestMethod.GET, value = "/update0")
    public User update(@ModelAttribute("User") User user){
    
        System.out.println(user.getId());
        System.out.println(user.getEmail());
        System.out.println(user.getWebLink());
    
        return userRepository.save(test);
    }
  4. si j'ai un record dans mysql dont le numéro est en 1919, et les colonnes (id, email, weblik) sont tous des valeurs.

    comme vous le voyez, l'utilisateur de l'objet qui est passé par le web ou le mobile ont deux propriétés

    http://localhost:8080/update?id=1919&[email protected]

    id et e-mail ont des valeurs et des weblink n'ont pas.

    Donc, si j'exécute save méthode, les colonnes e-mail sera mis à jour pour [email protected], et la weblik domaine seront également mis à jour pour NULL, mais je ne veux pas mettre à jour ce champ, je veux juste la mise à jour du champ e-mail.

  5. J'ai deux façons de résoudre le problème, mais tous ne sont pas élégant.

    5.1 la charge de l'utilisateur de l'objet de la première et de la mise à jour

    User userExist = userRepository.findOne(user.getId());
    userExist.setEmail(user.getEmail());
    
    //or using 
    //BeanUtil.copyProprty(formDto,modle)
    
    userRepository.save();

    5.2 utilisation de @DynamicUpdate, mais sa ne fonctionne pas.

    Est-il d'autre moyen de mettre à jour le Modèle de l'Utilisateur et de ne pas faire un travail supplémentaire.

    Merci d'avance.

OriginalL'auteur diligent | 2015-08-02