Spring Data JPAのRepositoryを利用して、SQL Serverのレコードを更新したいです。
datetime型カラムの更新方法について教えてください。
現在私のプログラムでdatetime型のカラムを更新しようとすると以下のようなエラーが発生してしまいます。
###発生しているエラーメッセージ
org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:413) ~[spring-orm-4.2.7.RELEASE.jar:4.2.7.RELEASE] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:227) ~[spring-orm-4.2.7.RELEASE.jar:4.2.7.RELEASE]
###ソースコード(一部省略しています)
java
1@Entity(name = "UserMst") 2@Table(name = "USER_MST") 3public class UserMst { 4 //エンティティ 5 @Column(name = "LOGIN_ID") 6 private String loginId; 7 @Column(name = "CURRENT_LOGIN_TIME") 8 private Date currentLoginTime; 9 10(getter/setter省略)
java
1@Repository 2public interface UserMstRepository extends JpaRepository<UserMst, String> { 3 //リポジトリ 4 @Query("update UserMst u set u.currentLoginTime = :time where u.loginId = :loginId") 5 @Modifying 6 public int setCurrentLoginTime(@Param("loginId") String id, @Param("time") Date name); 7 8 public UserMst findByLoginIdAndPassword(final String pLoginId, final String pPassword); 9 public UserMst findByloginId(final String pLoginId); 10}
java
1//呼び出し 2 ・ 3 ・ 4 @Autowired 5 private UserMstRepository userRepository; 6 ・ 7 ・ 8 public void login(){ 9 ・ 10 ・ 11 Date date = new Date(); 12 userRepository.setCurrentLoginTime(id.getString(),date);//ここでエラーが発生 13 } 14 ・ 15 ・
###試したこと
SimpleDateFormatを利用して"yyyy-MM-dd HH:mm:ss"に変換してみたりもしたのですが同じエラーが出ました。
ネイティブクエリを利用すればdatetime型にCASTできるとは思うのですがせっかくなのでJPAに則ったやり方で実装したいです。
よろしくお願いします。