Mise en veille prolongée seulement la requête des opérations, mais l'exécution effective de la déclaration de mise à jour

Tout récemment découvert dans une transaction requête exécutée dans le projet, ouvrez l'impression de débogage SQL a été trouvé pour avoir une déclaration de mise à jour. Après enquête a révélé que la valeur de l'objet est contenue dans l'entité ne remplace pas égaux et les opérations de hashcode, allant de mise en veille prolongée de suspicion objets trouvés lors de la comparaison avec les égaux par défaut, de sorte à effectuer la suppression, puis insérez le fonctionnement.

objet entité:

@Getter
@Setter
@ToString
@Entity
public class Person extends AbstractPersistable {
    @Column
    private String name;
    @ElementCollection(targetClass = Phone.class)
    @CollectionTable
    private Set<Phone> phones;
}

Valeur Objet:

@Getter
@Setter
@ToString
@Embeddable
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(of = "number")
public class Phone implements Serializable {
    @Column
    private String number;
}

Remarque Pour remplacer égaux et hashCode. Sinon, le journal de débogage est la suivante:

Mise en veille prolongée: sélectionnez person0_.id comme id1_19_, person0_.version comme version2_19_, person0_.name comme name3_19_ d' une personne person0_ où person0_.name =?
Mise en veille prolongée: sélectionnez phones0_.person_id comme person_i1_20_0_, phones0_.number comme number2_20_0_ de person_phones phones0_ où phones0_.person_id =?
Personne (name = 333, téléphone = [Téléphone (numéro = 34 567), Téléphone (numéro = 3456)])
Mise en veille prolongée: mise à jour set version personne = ?, name =? où id =? et = version plus récente?
Mise en veille prolongée: supprimer de person_phones où person_id =?
Mise en veille prolongée: insertion dans person_phones (person_id, nombre) des valeurs (?,?)
Mise en veille prolongée: (?,) INSERT INTO person_phones (person_id, nombre)

mise en veille prolongée ouverture d'attache de chaussure du ressort impression SQL et paramètres de la méthode d'impression:

Ressources ajoutées logback-spring.xml, qui se lit comme suit:

<configuration> 
    <include resource = "org / springframework / boot / enregistrement / logback / base.xml" /> 
    <enregistreur name = "org.hibernate.engine.QueryParameters" niveau = "debug" /> 
    <logger name = "org .hibernate.engine.query.HQLQueryPlan "niveau = "debug"/> 
    <enregistreur name = "" niveau = "org.hibernate.type.descriptor.sql.BasicBinder TRACE"/> 
    <enregistreur name =" org.hibernate.SQL "level =" debug "/> 
</ configuration>

 

 

 

 

 

Publié six articles originaux · louange gagné 1 · vues 8542

Je suppose que tu aimes

Origine blog.csdn.net/guangmingguangming/article/details/104885791
conseillé
Classement