Hazırda bekletme, aralarında bir hata olsa bile varlığımı otomatik olarak güncelliyor

0

Soru

"Program" adında bir varlığım var. Bu varlıkla bir operasyon yapıyorum. Ama nasıl ve neden bilmiyorum, varlığım güncelleniyor, hatta istisna alıyorum. Yani herkes bu sorunu çözmek için bana yardımcı olabilir.

Denetleyici

@GetMapping("/testtransaction/{tid}")
public ApiResponse testTransaction(@PathVariable("tid") String tid){
     return gsService.testTransaction(tid);
}

Hizmet

@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = Exception.class)
public ApiResponse testTransaction(String tid) {
    ApiResponse apiResponse = new ApiResponse();
    try {
        Optional<Program> existProgram = programRepository.findById(tid);
        if(existProgram.isPresent()) {
            //For testing I am setting random value
            existProgram.get().setProgramName("tid_"+(Math.floor(Math.random() * 90 + 10)));
                
            try {
                int err = 8/0;
            }catch(Exception e) {
                throw new EntityNotFoundException(Program.class, "prog cd", tid);
            }
                    
            programRepository.save(existProgram.get());
            apiResponse.setData("Success");
        }else {
            apiResponse.setError("Program details not found for "+tid);
            apiResponse.setStatusCode(500);
        }
    }catch(Exception e) {
        apiResponse.setError("Something went wrong while testing.");
        apiResponse.setStatusCode(500);
        return apiResponse;
    }
    return apiResponse;
}

Varlık

package com.edudb.model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Size;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
@JsonInclude(value=Include.NON_NULL)
@Table(name = "PROGRAM_MASTER")
public class Program {
    @Id
    @Column(name = "PROGRAM_CD")
    private String programCd;
    
    @Column(name = "PROGRAM_NAME")
    @Size(min=1, max=100, message = "Minimum 1 & maximum 100 characters only")
    private String programName;
    
    @Column(name="ENT_BY")
    @Size(min=1, max=12, message = "Minimum 1 & maximum 12 characters only")
    private String entBy;
    
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="dd MMM yyyy")  
    @Column(name = "ENT_DT")
    @Temporal(TemporalType.DATE)
    private Date entDt;
    
    @Column(name="DEL_BY")
    @Size(min=1, max=12, message = "Minimum 1 & maximum 12 characters only")
    private String delBy;
    
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="dd MMM yyyy")  
    @Column(name = "DEL_DT")
    @Temporal(TemporalType.DATE)
    private Date delDt;
    
    @Column(name="LAST_UPDT_BY")
    @Size(min=1, max=12, message = "Minimum 1 & maximum 12 characters only")
    private String updtBy;
    
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="dd MMM yyyy")  
    @Column(name = "LAST_UPDT_DT")
    @Temporal(TemporalType.DATE)
    private Date updtDt;
}

Postacıda ne aldığımı yanıtla

{
    "statusCode": 500,
    "error": "Something went wrong while testing."
}

Bahar önyükleme günlüğü

2021-11-23 10:34:20 DEBUG --- origin:null
 : com.datanet.filter.SimpleCorsFilter     2021-11-23 10:34:20 DEBUG --- 
    select
        program0_.program_cd as program_cd1_83_0_,
        program0_.del_by as del_by2_83_0_,
        program0_.del_dt as del_dt3_83_0_,
        program0_.ent_by as ent_by4_83_0_,
        program0_.ent_dt as ent_dt5_83_0_,
        program0_.program_name as program_name6_83_0_,
        program0_.last_updt_by as last_updt_by7_83_0_,
        program0_.last_updt_dt as last_updt_dt8_83_0_ 
    from
        program_master program0_ 
    where
        program0_.program_cd=?
 : org.hibernate.SQL                       2021-11-23 10:34:20 TRACE --- binding parameter [1] as [VARCHAR] - [demo]
 : ibernate.type.descriptor.sql.BasicBinder2021-11-23 10:34:20 DEBUG --- 
    update
        program_master 
    set
        del_by=?,
        del_dt=?,
        ent_by=?,
        ent_dt=?,
        program_name=?,
        last_updt_by=?,
        last_updt_dt=? 
    where
        program_cd=?
 : org.hibernate.SQL                       2021-11-23 10:34:20 TRACE --- binding parameter [1] as [VARCHAR] - [john]
 : ibernate.type.descriptor.sql.BasicBinder2021-11-23 10:34:20 TRACE --- binding parameter [2] as [DATE] - [2021-10-06]
 : ibernate.type.descriptor.sql.BasicBinder2021-11-23 10:34:20 TRACE --- binding parameter [3] as [VARCHAR] - [peter]
 : ibernate.type.descriptor.sql.BasicBinder2021-11-23 10:34:20 TRACE --- binding parameter [4] as [DATE] - [2021-10-06]
 : ibernate.type.descriptor.sql.BasicBinder2021-11-23 10:34:20 TRACE --- binding parameter [5] as [VARCHAR] - [tid_52.0]
 : ibernate.type.descriptor.sql.BasicBinder2021-11-23 10:34:20 TRACE --- binding parameter [6] as [VARCHAR] - [john]
 : ibernate.type.descriptor.sql.BasicBinder2021-11-23 10:34:20 TRACE --- binding parameter [7] as [DATE] - [2021-10-06]
 : ibernate.type.descriptor.sql.BasicBinder2021-11-23 10:34:20 TRACE --- binding parameter [8] as [VARCHAR] - [demo]
 : ibernate.type.descriptor.sql.BasicBinder

Bu nedenle, daha önce bu sorunla karşılaşan varsa, lütfen bunu düzeltmeme yardımcı olabilir: (

hibernate jpa rollback spring-boot
2021-11-23 05:18:34
1

En iyi cevabı

0

Catch veya finally veya fucntion sonunda aşağıdaki kod satırlarını ekleyerek, hazırda bekletme tüm hareketi geri alır.

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
2021-11-23 07:10:15

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................