質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

1回答

11907閲覧

Spring Data JPAを利用したdatetime型カラムの更新

koronatail

総合スコア433

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

1クリップ

投稿2016/08/17 08:51

編集2022/01/12 10:55

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//呼び出し 234 @Autowired 5 private UserMstRepository userRepository; 678 public void login(){ 91011 Date date = new Date(); 12 userRepository.setCurrentLoginTime(id.getString(),date);//ここでエラーが発生 13 } 1415

###試したこと
SimpleDateFormatを利用して"yyyy-MM-dd HH:mm:ss"に変換してみたりもしたのですが同じエラーが出ました。
ネイティブクエリを利用すればdatetime型にCASTできるとは思うのですがせっかくなのでJPAに則ったやり方で実装したいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YukiYoshida

2016/08/19 03:34

@Transactional public void login() { } としても同じエラーが出ますか?
guest

回答1

0

SQL Serverが手元に無いので確認できていませんが、
currentLoginTimeフィールドの型をjava.sql.Timestampにするか、@Temporal(TemporalType.TIMESTAMP)アノテーション(APIバージョンによってはTemporalType.DATETIMEもある?)を付ける方法はどうでしょうか?
currentLoginTimeDatejava.util.Dateの方である前提で。

UserMstRepositoryも修正する必要があるかも知れませんが、そこは状況に応じて対処してください。

参考リンク:

EJB3 JPA: Dealing with Date, Time and Timestamp — Developers' ScrapPad
http://www.developerscrappad.com/228/java/java-ee/ejb3-jpa-dealing-with-date-time-and-timestamp/

投稿2016/08/22 23:15

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問