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

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

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

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

Spring

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

Spring Boot

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

Q&A

1回答

2148閲覧

spring 結合したテーブルから取得した結果をエンティティーに変換する方法

r_takeuchi

総合スコア8

Java

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

Spring

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

Spring Boot

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

0グッド

0クリップ

投稿2017/07/14 04:45

編集2022/01/12 10:55

リポジトリクラスで、結合したテーブルから取得した結果をObject[]からエンティティに変換するにはどうした良いのでしょうか?
ご教授お願いします。
最終的にTyhmeleafに渡して画面に表示したいです。

<補足>-----------------
具体的にはコントローラから
model.addAttribute("useInputs", useInputs);
とし、「customers/list」の画面(Tyhmeleaf)に渡していますが、
UseInputクラスでないため、
"${useInputs.item_id}"
で値を取得できません。
よろしくお願いします。


UseInputRepository.java

public interface UseInputRepository extends JpaRepository<UseInput, Integer> { @Query("SELECT c.id as id, c.client_id as client_id, c.item_id as item_id, d.use_date, d.use_number as use_number " + "FROM ClientItem c " + "LEFT JOIN c.dayUseList d " + "WHERE c.client_id = :client_id AND d.use_date = :use_date ") List<UseInput> findAllOrderById(@Param("client_id") String userId, @Param("use_date") Date useDate); } 実際の戻り値はList<Object[]>

UseInput Entity

@Data @NoArgsConstructor @AllArgsConstructor @Entity public class UseInput { @Id @GeneratedValue private Integer id; private String client_id; private String item_id; private Date use_date; private Integer use_number; }

ClientItem Entity

@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "m_client_item") public class ClientItem implements Serializable{ @Id private Integer id; private String client_id; private String item_id; private Integer is_valid; @OneToMany @JoinColumns({ @JoinColumn(name="item_id", referencedColumnName="item_id", insertable = false, updatable = false ), @JoinColumn(name="client_id", referencedColumnName="client_id", insertable = false, updatable = false) }) private List<DayUse> dayUseList; }

DayUse Entity

@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "t_day_use") public class DayUse{ @Id @GeneratedValue private Integer id; private String item_id; private String client_id; private Date use_date; private Integer use_number; private Date update_date; @ManyToOne @JoinColumns({ @JoinColumn(name="item_id", referencedColumnName="item_id", insertable = false, updatable = false), @JoinColumn(name="client_id", referencedColumnName="client_id", insertable = false, updatable = false) }) private ClientItem is_valid; }

UseInputService

@Service @Transactional public class UseInputService { @Autowired UseInputRepository useInputRepository; public List<UseInput> findAll(String userId, Date useDate) { return useInputRepository.findAllOrderById(userId,useDate); } }

Controller

@GetMapping String list(Model model) { Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String userId = ((UserDetails)principal).getUsername(); LocalDate kariUseDate = LocalDate.now(); Date useDate= java.sql.Date.valueOf(kariUseDate); List<UseInput> useInputs = useInputService.findAll(userId,useDate); model.addAttribute("useInputs", useInputs); return "customers/list"; }

list.html

<table> <tr th:each="useInputs : ${useInputs}"> <td th:text="${useInputs.item_id}">品名</td> <td th:text="${useInputs.use_number}">使用数</td> </tr> </table>

<デバック時の状態を追記>
イメージ説明

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

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

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

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

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

A-pZ

2017/07/14 05:36

問題が発生している箇所や内容を書くと、回答が得られるかと思います。
r_takeuchi

2017/07/14 06:22

アドバイスありがとうございます。問題点を具体的に追記してみました。
guest

回答1

0

Thymeleafの記述でマズい部分が一箇所ありました。

html

1th:each="useInputs : ${useInputs}"

Listを格納している変数名と、Listの内容を取り出した変数名が同じになっているため、正しく動作しません。末尾の s を取ってあげると、わかりやすくて良いかと思います。

html

1<tr th:each="useInput : ${useInputs}"> 2 <td th:text="${useInput.item_id}">品名</td> 3 <td th:text="${useInput.use_number}">使用数</td> 4</tr>

投稿2017/07/14 07:07

A-pZ

総合スコア12011

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

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

r_takeuchi

2017/07/14 12:15

ご指摘ありがとうございます。 ご指摘のように修正してみましたが、値が参照できませんでした。 コントローラのList<UseInput> useInputsをデバッグでみると、 値は入っているのですが、ラベルが取得できてないようです。
A-pZ

2017/07/14 12:27

であれば、th:eachで表示しようとしている ${useInputs}に値が渡されていのか、または表示しているテンプレートhtmlが想定したものかを確認したほうが良いでしょうか。Controllerの表記と、テンプレートファイルの記述方法には特に問題はありませんから、 <div th:text="${useInputs}"></div>などでオブジェクトの有無を確認してみてください。
r_takeuchi

2017/07/18 01:06

いつも回答頂きありがとうございます。 確認してみたみたところ 『[[Ljava.lang.Object;@64a1911c, [Ljava.lang.Object;@d9ff91a]』 と、画面に表示されました。
A-pZ

2017/07/18 01:46 編集

デバッグの状態を見ましたが、${useInputs}に値は入っているようですが、Listの中身はObjectになっているようですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問