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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

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

Spring Boot

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

Q&A

解決済

2回答

5144閲覧

@Queryのエラーが解決できない

qqqqqqqq

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

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

Spring Boot

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

0グッド

0クリップ

投稿2021/09/01 06:58

springbootjpaの@queryでSQL文を実行したいのですがエラーが出てその原因が分からない。
エラーを検索したが同様のエラーが出ている人がいなかったです。
下記がエラーになります。

org.h2.jdbc.JdbcSQLNonTransientException: メソッドはクエリしかサポートしていません。executeQueryのかわりに、excecute、またはexecuteUpdateを使用してください Method is only allowed for a query. Use execute or executeUpdate instead of executeQuery; SQL statement: DELETE FROM THREAD_FORM WHERE THREAD_ID IN (SELECT MIN(THREAD_ID) FROM THREAD_FORM); [90002-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:505) ~[h2-1.4.200.jar:1.4.200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] at org.h2.command.Prepared.query(Prepared.java:231) ~[h2-1.4.200.jar:1.4.200] at org.h2.command.CommandContainer.query(CommandContainer.java:285) ~[h2-1.4.200.jar:1.4.200] at org.h2.command.Command.executeQuery(Command.java:195)

下記がソースです。

java

1public interface ThreadRepository extends JpaRepository<ThreadForm,Long> { 2 @Query(value="DELETE FROM THREAD_FORM WHERE THREAD_ID IN (SELECT MIN(THREAD_ID) FROM THREAD_FORM);", nativeQuery = true) 3 void threadIdMinDeleat(); 4} 5

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

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

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

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

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

m.ts10806

2021/09/01 07:04

動作確認してないのでこちらに書きますが、SQL最後の;って不要じゃないですか?
qqqqqqqq

2021/09/01 07:12

ご指摘ありがとうございます。 不要でした。しかしエラーは変わらずにいます。 この@queryがついたメソッドは戻り値引数、関係なく実行してくれるのでしょうか?
guest

回答2

0

@Query
だけだとSELECTしか使えず、
更新系のSQLの場合は
@Modifying
も一緒につけなければけなかったと思います。

投稿2021/09/01 07:15

q_sane_q

総合スコア610

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

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

qqqqqqqq

2021/09/01 07:26

ご指摘ありがとうございます。 付けた結果、削除の実行はされたみたいですがエラーが出てうまくできませんでした。 エラー update/delete query] with root cause javax.persistence.TransactionRequiredException: Executing an update/delete query
guest

0

自己解決

@Transactional
public interface ThreadRepository extends JpaRepository<ThreadForm,Long> {
@Modifying
@Query(value="DELETE FROM THREAD_FORM WHERE THREAD_ID IN (SELECT MIN(THREAD_ID) FROM THREAD_Form)", nativeQuery = true)
void threadIdMinDeleat();
}

太字の部分を追加したら実行できました。
後、sqlの最後の;を消したら上手くいきました。
ありがとうございました。

投稿2021/09/01 07:44

qqqqqqqq

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問