前提・実現したいこと
Spring Bootを用いてWeb家計簿アプリの作成を行なっています。
そこでデータベースの収入、支出テーブルからそれぞれレコードを読み込み一覧表示したいと思っています。
以下2点を実装する事がしたい事です。
・DBから数値→文字列に変換して取得
・文字列+文字列の連結
【想定】
+-----------------+-------------+--------------+
| rec_date | amount | category |
+-----------------+-------------+--------------+
| 2021-04-11 | 1234 | 食費 |
| 2021-05-07 | 1111 | 雑費 |
+-----------------+-------------+--------------+
+-----------------+-------------+--------------+
| rec_date | amount | category |
+-----------------+-------------+--------------+
| 2021-05-11 | 111111 | 給料 |
| 2021-05-17 | 1000 | 雑収入 |
+-----------------+-------------+--------------+
数値を文字列に変換しUNION ALL↓
+-----------------+-------------+--------------+
| rec_date | amount | category |
+-----------------+-------------+--------------+
| 2021-04-11 | -1234 | 食費 |
| 2021-05-07 | -1111 | 雑費 |
| 2021-05-11 | +111111 | 給料 |
| 2021-05-17 | +1000 | 雑収入 |
+-----------------+---------------+-----------+
発生している問題・エラーメッセージ
下記のコードでプロジェクトを実行すると'-'のみが連結されて表示されます。 どうやらint→ncharの変換は行えているようですが、文字列の連結が出来ていないようです。 +---------------+----------+-----------+ | rec_date | amount | category | +---------------+----------+-----------+ | 2021-04-11 | -1234 | 食費 | | 2021-05-07 | -1111 | 雑費 | | 2021-05-11 | 111111 | 給料 | | 2021-05-17 | 1000 | 雑収入 | +---------------+----------+-----------+
該当のソースコード
Java
1package com.example.demo; 2 3import java.util.List; 4 5import org.springframework.data.jpa.repository.JpaRepository; 6import org.springframework.data.jpa.repository.Query; 7import org.springframework.stereotype.Repository; 8 9@Repository 10public interface MainRepository extends JpaRepository<MainMenu, Integer>{ 11 public static final String mainSql = 12 "SELECT\n" 13 + " CONCAT('-', CONVERT(amount, nchar)) as amount,\n" 14 + " category,\n" 15 + " rec_date,\n" 16 + " reg_no\n" 17 + "FROM\n" 18 + " t_spends\n" 19 + "WHERE\n" 20 + " del_flag = 0\n" 21 + "UNION ALL\n" 22 + "SELECT\n" 23 + " CONCAT('+', CONVERT(amount, nchar)) as amount,\n" 24 + " category,\n" 25 + " rec_date,\n" 26 + " reg_no\n" 27 + "FROM\n" 28 + " t_incomes\n" 29 + "WHERE\n" 30 + " del_flag = 0\n" 31 + "ORDER BY\n" 32 + " rec_date"; 33 34 @Query(value = mainSql, nativeQuery = true) 35 List<MainMenu> findAll(); 36} 37
Java
1package com.example.demo; 2 3import java.io.Serializable; 4import java.sql.Date; 5 6import javax.persistence.Column; 7import javax.persistence.Entity; 8import javax.persistence.Id; 9 10import lombok.Data; 11 12@Data 13@Entity 14public class MainMenu implements Serializable{ 15 @Id 16 @Column(name = "reg_no") 17 private int reg_no; 18 19 @Column(name = "rec_date") 20 private Date rec_date; 21 22 @Column(name = "amount") 23 private int amount; 24 25 @Column(name = "category") 26 private String category; 27 28 @Override 29 public String toString() { 30 return "MainMenu [reg_no=" + reg_no + ", rec_date=" + rec_date + ", amount=" + amount + ", category=" + category 31 + "]"; 32 } 33} 34
試したこと
mariaDBを使っているのですが文字列連結の方言が含まれておりそれが原因であると予想し、JPQLでクエリを実装しようと試みました。しかしint→ncharの変換、文字列変換の方法がわからずに断念しました。
そもそもJPQLでそれらの操作を行えるのかもあやふやになってしまってます。
補足情報(FW/ツールのバージョンなど)
mariaDB ver15.1
Eclipse 4.19.0
回答1件
あなたの回答
tips
プレビュー