Hoy hablamos sobre cómo iniciar un negocio.
Antes, configuramos el inicio de la transacción en JpaConfiguration.
Ver: https://blog.csdn.net/hanjun0612/article/details/105239557
Si la transacción no se inicia, se informará un error: ejecutar una consulta de actualización / eliminación
Uno, asuntos de Dao
Existe este párrafo, que representa el comienzo de los asuntos de Dao.
@EnableTransactionManagement (mode = AdviceMode.ASPECTJ)
Entonces, si es el método de Dao,
Solo necesitamos agregar: @Transactional y @Modifying
@Repository public interface AccountDao extiende JpaRepository <Account, Integer> { @Transactional @Modifying @Query (value = "update test_account set balance = balance-: balance where name =: name", nativeQuery = true ) void update (@Param (value = "nombre") Nombre de cadena, @ Param (valor = "balance" ) Doble balance); }
Segundo, transacción de servicio
Si usted es una transacción de servicio, debe agregar @EnableTransactionManagement en el inicio de la aplicación
@SpringBootApplication (scanBasePackages = {"com.test" }) @EnableEurekaClient @EnableTransactionManagement public class Service1Application { public static void main (String [] args) { SpringApplication.run (Service1Application. Class , args); } }
Llamada de servicio
paquete com.test.service; import com.test.dao.AccountDao; import com.test.model.Account; import org.hibernate.SQLQuery; importar org.hibernate.transform.Transformers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; importar org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.persistence.Transient; importar java.util.HashMap; import java.util.List; import java.util.Map; / ** * @author Tyler * @date 2020/3/31 * / @Service ( "accountService" ) clase pública AccountServiceImpl implementa AccountService { @PersistenceContext EntityManager em; @Transactional pública vacío Update (entidad Cuenta) lanza la excepción { cadena SQL = "equilibrio conjunto actualización test_account = saldo +: equilibrio donde nombre =: nombre" ; Map <String, Object> params = new HashMap <Cadena, Objeto> (); params.put ( "balance" , entity.getBalance ()); params.put ( "nombre" , entity.getName ()); Consulta query = em.createNativeQuery (sql); para (Map.Entry <String, Object> entrada: params.entrySet ()) { query.setParameter (entry.getKey (), entry.getValue ()); } query.unwrap (SQLQuery. class ) .setResultTransformer (Transformers.ALIAS_TO_ENTITY_MAP); query.executeUpdate (); // lanzar una nueva excepción ("hola"); } }
Depende de usted, dónde controla la transacción, donde sea que comience.