@Modifying 註解和事務

@Modifying 註解和事務

  • @Query 與 @Modifying 這兩個註解可以定義個性話更新操作,
@Modifying
    @Query("UPDATE Person p SET p.email  = :email where id = :id")
    void updatePerson(@Param("email") String email, @Param("id") Integer id);

PS : 方法的返回值應該時int ,表示更新語句所影響的行數,在調用的地方必須添加事務 ,否則無法正常執行

  • SPring Data 提供了默認的事務處理方式,即所有的查詢爲只讀事務
  • 對於自己定義的方法,如果改變SpringData 提供的默認事務,可以在方法上添加@Transactional
  • 進行多個Repository操作時,也應該使他們在同一個事務中處理, 需要在service層實現多個Repository的調用 並在相應的方法上聲明事務
    PS : 出現了service層 因此需要在配置文件中添加自動掃描包
<!-- 配置自動掃描包 -->
     <context:component-scan base-package="com.atgugui.springdata"></context:component-scan>
  1. 定義的方法(PersonRepsotory 的實現接口中)
@Modifying
    @Query("UPDATE Person p SET p.email  = :email where id = :id")
    int updatePerson(@Param("email") String email, @Param("id") Integer id);
  1. 業務層中
@Service
public class PersonService {
    @Autowired
    private PersonRepsotory person;

    public void savePersons(List<Person> persons){  
        person.save(persons);
    }  

    @Transactional
    public void updateTest(String email, Integer id){
        person.updatePerson(email, id);
    }


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章