Comment magnifiquement mise à jour d'une entité JPA au Printemps de Données?

Donc, j'ai regardé les différents tutoriels sur JPA avec les Données du Printemps et de ce qui a été fait différents à de nombreuses reprises et je ne suis pas tout à fait sûr de ce que la bonne approche est de.

Supposer qu'il y est le prédécesseur de l'entité:

package stackoverflowTest.dao;

import javax.persistence.*;

@Entity
@Table(name = "customers")
public class Customer {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private long id;

@Column(name = "name")
private String name;

public Customer(String name) {
    this.name = name;
}

public Customer() {
}

public long getId() {
    return id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

Nous avons aussi un DTO qui est extrait de la couche de service, puis transmises au contrôleur/côté client.

package stackoverflowTest.dto;

public class CustomerDto {

private long id;
private String name;

public CustomerDto(long id, String name) {
    this.id = id;
    this.name = name;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

Alors maintenant, supposons que le Client veut changer son nom dans l'interface web, il n'y aura quelques contrôleur de l'action, où il y aura la mise à jour de DTO avec l'ancien IDENTIFIANT et le nouveau nom.

Maintenant, je dois sauver la mise à jour de DTO à la base de données.

Malheureusement il n'existe actuellement aucun moyen de mettre à jour un client existant (à l'exception de la suppression de l'entrée dans la base de données et la création d'une nouvelle Cusomter avec une nouvelle auto-générée)

Cependant que ce n'est pas faisable (surtout en considérant une telle entité pourrait avoir des centaines de relations potentiellement) - il n'y venir 2 droit de l'avant des solutions à mon avis:

  1. faire un setter pour l'id du Client de la classe et ainsi de permettre le réglage de l'id et puis enregistrez le Client de l'objet via le référentiel.

ou

  1. d'ajouter le champ id du constructeur et chaque fois que vous voulez mettre à jour une clientèle toujours créer un nouvel objet avec l'ancien id, mais les nouvelles valeurs pour les autres champs (dans ce cas, seul le nom)

Donc ma question est si il y a une règle générale sur la manière de faire cela?
Tout peut-être ce que les inconvénients des 2 méthodes que j'explique?

"Donc, actuellement, il n'existe aucun moyen pour mettre à jour un client existant (à l'exception de la suppression de l'entrée dans la DB et createing une nouvelle Cusomter avec une nouvelle auto-générée)" Dire... quoi?. Comment vous est venu cette idée?
si vous appelez save() avec le même ID et vous n'avez pas annulé, il vous donnera une ID en Double exception. Si vous avez configuré le Printemps Transactions correctement , alors à chaque fois que vous avez récupéré un client à partir de la DB et de fixer les valeurs que vous voulez, vous avez pu voir que certaines requêtes sont écrits dans les journaux. Mais encore laisse envisager sans JPA , dans vos scénarios de manière générale, comment vous pourriez mettre à jour un client en ligne avec simple sql ???? si vous n'avez pas la carte d'identité????
Je vais ajouter quelques clarfications dans un moment, merci pour vos commentaires
J'ai mis à jour la question de la rendre un peu plus claire

OriginalL'auteur Lukas Makor | 2016-09-28