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

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

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

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

Spring

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

Spring Boot

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

Q&A

解決済

2回答

3862閲覧

Spring Boot + Spring Data JPAでテーブルを結合したい

yuu_info

総合スコア14

Java

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

Spring

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

Spring Boot

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

0グッド

0クリップ

投稿2020/09/11 08:27

編集2020/09/11 08:47

前提・実現したいこと

Spring Boot + Spring Data JPAでテーブルを結合したいです。
SQL文が間違っているのだと思いますが、悩みすぎて頭が沸騰し、正常な思考が出来なくなってしまったのでお助けください。

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

Caused by: org.hibernate.QueryException: could not resolve property: shop_id of: com.example.pizza.entity.Customer
Caused by: org.hibernate.QueryException: could not resolve property: shop_id of: com.example.pizza.entity.Customer [SELECT p.productName, p.productPrice, p.customer.name, p.customer.address FROM com.example.pizza.entity.Purchase p INNER JOIN p.customer WHERE p.customer.shop_id = :shopId]

Purchase.java

package com.example.pizza.entity; import java.time.LocalDateTime; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import lombok.Data; @Entity @Data @Table(name="purchase") public class Purchase { @Id @Column(name="purchase_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long purchaseId; @ManyToOne @JoinColumn(name="shop_id") private Customer customer ; @Column(name="customer_id") private Long customerId; @Column(name="product_name") private String productName; @Column(name="product_price") private int productPrice; @Column(name="date") private LocalDateTime date; @Column(name="flag") private boolean flag; }

Customer.java

package com.example.pizza.entity; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import lombok.Data; @Entity @Data @Table(name="customer") public class Customer { @Id @Column(name="customer_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long customerId; @Column(name="shop_id") private Long shopId; @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL) private List<Purchase> purchase; @Column(name="name") private String name; @Column(name="phone") private String phone; @Column(name="address") private String address; }

PurchaseRepository.java

package com.example.pizza.repository; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.example.pizza.entity.Purchase; @Repository public interface PurchaseRepository extends JpaRepository<Purchase, Long>{ @Query("SELECT p FROM Purchase p WHERE p.shopId = :shopId") List<Purchase> findPurchases(@Param("shopId")Long shopId); @Query("SELECT p.productName, p.productPrice, p.customer.name, p.customer.address" +" FROM Purchase p INNER JOIN p.customer WHERE p.customer.shop_id = :shopId") List<Purchase> findPandC(@Param("shopId") Long shopId); }

###テーブル定義
purchaseテーブル
イメージ説明
customerテーブル
イメージ説明

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

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

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

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

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

guest

回答2

0

自己解決

customerテーブルのcustomer_idとpurchaseテーブルのcustomer_idでJOINすべきでした。
色々と組みなおさなければいけないので、こちらの質問は解決済みとさせていただきます。

投稿2020/09/11 09:21

yuu_info

総合スコア14

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

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

0

@Query("SELECT p.productName, p.productPrice, p.customer.name, p.customer.address" +" FROM Purchase p INNER JOIN p.customer WHERE p.customer.shop_id = :shopId")

p.customerって何でしょう?
純粋に定義だけ見るなら INNER JOIN customer WHERE customer.shop_id = :shopId
ではないでしょうか。

あとはテーブル定義次第ですが。

ひとまず、アプリケーションから実行する前に、直に実行して想定の結果を得られるSQLを組めてから汲みこまれた方が良いと思います。

投稿2020/09/11 08:33

編集2020/09/11 08:34
m.ts10806

総合スコア80875

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

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

yuu_info

2020/09/11 08:43

Purchase.javaのcustomerです。 https://qiita.com/wataru908/items/f30332d48917c38220d5 こちらの記事によると、Spring Bootでテーブル結合する場合このような記述方法になるみたいです。 失礼しました、テーブル定義の方も追加致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問