前提・実現したいこと
現在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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー