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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Spring Boot

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

Q&A

0回答

1596閲覧

RepositoryにおけるSQL文でのTRANCATE,及び別テーブルからの内容に関するINSERTについて

退会済みユーザー

退会済みユーザー

総合スコア0

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Spring Boot

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

0グッド

0クリップ

投稿2021/07/10 12:43

前提・実現したいこと

現在SpringBoot及びJava,MySQLで制作しているアプリについて、
現在制作しているこちらのRepositoryを原因として、エラーが発生しております。
このエラーを発生させることなく、HTMLを表示させたいと考えております。

SQL文で実現したい内容としては、
・まず既存の「packAccountSearch」テーブルをTRUNCATEする
・既存の「packAccountSearch」テーブルに、別テーブルのaccount_id,pack_name,pack_image1,pack_image2,pack_image3の5つのカラムをINSERTする
(「packAccountSearch」テーブルのカラムは、
c_id,account_id,pack_name,pack_image1,pack_image2,pack_image3 の6つです。)
・そのINSERTされた「packAccountSearch」テーブルのデータを特定の条件下でSELECTする

で、その後はPackAccountSearchエンティティにListとして値を格納することを考えております。

発生している問題・エラーメッセージ

このRepositoryを用いてHTMLに接続しようとすると {"timestamp":"2021-07-10T11:34:31.146+0000","status":500,"error":"Internal Server Error","message":"could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet","path":"/top"} というエラーが出てしまいます。

該当のソースコード

Java

1package com.ath.entity; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 5import org.springframework.data.jpa.repository.Modifying; 6import org.springframework.data.jpa.repository.Query; 7 8import javax.transaction.Transactional; 9import java.util.List; 10 11public interface PackAccountSearchRepository extends JpaRepository<PackAccountSearch, Integer>, JpaSpecificationExecutor<PackAccountSearch> { 12 13 14 @Transactional 15 @Modifying 16 @Query(value = 17 "TRUNCATE TABLE packAccountSearch;\n" + 18 "insert into packAccountSearch(account_id,pack_name,pack_image1,pack_image2,pack_image3)\n" + 19 "select user_account.account_id, pack.pack_name,\n" + 20 "pack.pack_image1 ,pack.pack_image2 ,pack.pack_image3\n" + 21 "from user_account,pack\n" + 22 "where\n" + 23 "\n" + 24 "user_account.allergy_id not like concat('%', pack.allergy_id, '%')\n" + 25 "select c_id,account_id,pack_name,pack_image1 ,pack_image2 , pack_image3\n" + 26 "from packAccountSearch;" 27 , nativeQuery = true) 28 29 30 31 List<PackAccountSearch> findAllPackAccount(); 32}

試したこと

@Queryの中身において(value =
"select c_id,account_id,pack_name,pack_image1 ,pack_image2 , pack_image3\n" +
"from packAccountSearch;"
, nativeQuery = true)
のみにすると問題なくデータをHTML上に表示することができました。

またMySQLWorkBenchでは問題なくデータをSELECTしてこれました。

ということはSQL文自体は間違いがなく、Javaで記載しているRepositoryにおいて問題が発生しているということであります。
( @Query(value =
"TRUNCATE TABLE packAccountSearch;\n" +
"insert into packAccountSearch(account_id,pack_name,pack_image1,pack_image2,pack_image3)\n" +
"select user_account.account_id, pack.pack_name,\n" +
"pack.pack_image1 ,pack.pack_image2 ,pack.pack_image3\n" +
"from user_account,pack\n" +
"where\n" +
"\n" +
"user_account.allergy_id not like concat('%', pack.allergy_id, '%')
ここにエラーの原因が存在しております)

自分の中では@Queryでは問い合わせしか実現できず、SELECTしかできないにも関わらず、
TRUNCATE及びINSERTをしようとしているためエラーになっているかなと考えております。

どうすればよいか方向性が定まりませんので、差し支えなければご指導のほどよろしくお願いします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

shiketa

2021/07/10 13:18 編集

MySQLはくわしくありませんが、かつて触れたDBではtuncateはトランザクション外で実行されました。 調べてみるとMySQLもそのようですね。これは関係しませんか? https://www.sria.co.jp/blog/2014/08/mysql-can-do-rollback-truncate/ 現象と関係ないとしても、ナニかあったときにロールバックされないてのは、非常にまずいことになるとおもいます。
gpsoft

2021/07/11 02:13

@Queryに複数のSQL文を指定可能なのかな? と疑問を感じました。 単文しかダメだったりしませんか? (裏付け取れませんでしたが…) >@Queryでは問い合わせしか実現できず、SELECTしかできないにも関わらず、 @Modifyingを付けてあるので、SELECTしかダメってことは無いと思いますよ。 https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#jdbc.query-methods.at-query.modifying
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問