對於 Spring Data JPA 使用的時間不長,只有兩年時間。但是踩過坑的卻不少。
使用下列代碼
@Modifying @Query("update User u set u.firstname = ?1 where u.lastname = ?2") int setFixedFirstnameFor(String firstname, String lastname);
首先讓人奇怪的是,repository method只能返回int或者轉為void,因為這個操作只會把數據寫入到數據庫,但是不會select。
執行完modifying query, EntityManager可能會包含過時的數據,因為EntityManager不會自動清除實體。
只有添加clearAutomatically屬性,EntityManager才會自動清除實體對象。
@Modifying(clearAutomatically = true)
@Query("update RssFeedEntry feedEntry set feedEntry.read =:isRead where feedEntry.id =:entryId")
void markEntryAsRead(@Param("entryId") Long rssFeedEntryId, @Param("isRead") boolean isRead);