質問するログイン新規登録

質問編集履歴

7

文法の追加

2020/05/25 05:16

投稿

TaSa
TaSa

スコア1

title CHANGED
File without changes
body CHANGED
@@ -151,15 +151,27 @@
151
151
  ```model
152
152
  package com.example.demo.domain.model;
153
153
 
154
+ import javax.persistence.Column;
155
+ import javax.persistence.Entity;
156
+ import javax.persistence.Id;
157
+ import javax.persistence.Table;
158
+ import javax.validation.constraints.NotNull;
159
+
154
160
  import lombok.Data;
155
161
 
162
+ @Entity
156
163
  @Data
164
+ @Table(name = "product")
157
165
  public class Product {
158
166
 
167
+ @Id
168
+ @Column(name = "productCode")
159
169
  private String productCode; //商品コード
160
170
 
171
+ @Column(name = "productName")
161
172
  private String productName; //商品名
162
173
 
174
+ @NotNull
163
175
  private int price; //値段
164
176
  }
165
177
  ```
@@ -169,4 +181,29 @@
169
181
  values
170
182
  ('A0001','商品A',10000)
171
183
  ;
184
+ ```
185
+ ```ProductDaoJdbcImpl
186
+ (中略)
187
+ @Override
188
+ // Productテーブルのデータを全件取得.
189
+ public List<Product> selectMany() throws DataAccessException {
190
+ List<Map<String, Object>> getList = jdbc.queryForList("SELECT * FROM product");
191
+ //結果返却用の変数
192
+ List<Product> productList = new ArrayList<Product>();
193
+ //取得したデータを結果返却用のListに格納していく
194
+ for (Map<String, Object> map : getList) {
195
+ //Productインスタンスの生成
196
+ Product product = new Product();
197
+
198
+ //Productインスタンスに取得したデータをセットする
199
+ product.setProductCode((String) map.get("productCode")); //商品コード
200
+ product.setProductName((String) map.get("productName")); //商品ID
201
+ product.setPrice((Integer) map.get("price")); //商品ID
202
+
203
+ //結果返却用のListに追加
204
+ productList.add(product);
205
+ }
206
+ return productList;
207
+ }
208
+
172
209
  ```

6

誤字の修正

2020/05/25 05:16

投稿

TaSa
TaSa

スコア1

title CHANGED
File without changes
body CHANGED
@@ -10,8 +10,8 @@
10
10
 
11
11
  ```
12
12
  There was an unexpected error (type=Internal Server Error, status=500).
13
- org.hibernate.hql.internal.ast.QuerySyntaxException: product is not mapped [SELECT p FROM product p WHERE p.productCode LIKE :productCode ]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: product is not mapped [SELECT p FROM product p WHERE p.productCode LIKE :productCode ]
14
- org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: product is not mapped [SELECT p FROM product p WHERE p.productCode LIKE :productCode ]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: product is not mapped [SELECT p FROM product p WHERE p.productCode LIKE :productCode ]
13
+ org.hibernate.hql.internal.ast.QuerySyntaxException: expecting IDENT, found '*' near line 1, column 10 [SELECT p.* FROM product p WHERE p.productCode LIKE :productCode ]
14
+ java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting IDENT, found '*' near line 1, column 10 [SELECT p.* FROM product p WHERE p.productCode LIKE :productCode ]
15
15
  ```
16
16
 
17
17
  ### 該当のソースコード

5

誤字の修正

2020/05/25 02:30

投稿

TaSa
TaSa

スコア1

title CHANGED
File without changes
body CHANGED
@@ -149,7 +149,6 @@
149
149
  </html>
150
150
  ```
151
151
  ```model
152
- /* 商品マスタのデータ */
153
152
  package com.example.demo.domain.model;
154
153
 
155
154
  import lombok.Data;

4

文法の修正、追加

2020/05/25 02:26

投稿

TaSa
TaSa

スコア1

title CHANGED
File without changes
body CHANGED
@@ -61,7 +61,7 @@
61
61
  @Override
62
62
  public List<Product> search(String productCode, String productName, BigDecimal priceFrom, BigDecimal priceTo) {
63
63
  StringBuilder sql = new StringBuilder();
64
- sql.append("SELECT p FROM product p WHERE ");
64
+ sql.append("SELECT p.* FROM product p WHERE ");
65
65
  boolean andFlg = false;
66
66
  boolean productCodeFlg = false;
67
67
  boolean priceFromFlg = false;
@@ -148,6 +148,22 @@
148
148
  </body>
149
149
  </html>
150
150
  ```
151
+ ```model
152
+ /* 商品マスタのデータ */
153
+ package com.example.demo.domain.model;
154
+
155
+ import lombok.Data;
156
+
157
+ @Data
158
+ public class Product {
159
+
160
+ private String productCode; //商品コード
161
+
162
+ private String productName; //商品名
163
+
164
+ private int price; //値段
165
+ }
166
+ ```
151
167
  ```DB
152
168
  /* 商品マスタのデータ */
153
169
  insert into product(productCode,productName,price)

3

情報の追加

2020/05/25 02:25

投稿

TaSa
TaSa

スコア1

title CHANGED
File without changes
body CHANGED
@@ -3,6 +3,9 @@
3
3
  検索機能を実装していて、SQLの部分でエラーが出ていますが原因がわかりません。
4
4
  何かお気づきの点ありましたら、ご教授いただけると幸いです。
5
5
 
6
+ 参考にしたサイト
7
+ https://dev.classmethod.jp/articles/spring-data-jpa_search/
8
+
6
9
  ### 発生している問題・エラーメッセージ
7
10
 
8
11
  ```

2

内容の修正

2020/05/22 07:34

投稿

TaSa
TaSa

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,61 +1,53 @@
1
1
  ### 前提・実現したいこと
2
2
  SpringBootでwebアプリケーションを開発しています。
3
- 検索機能を実装していて、SQLの部分でエラーが出てデータを引っ張ってこれな状況です。
3
+ 検索機能を実装していて、SQLの部分でエラーが出ていが原因がわかりません
4
4
  何かお気づきの点ありましたら、ご教授いただけると幸いです。
5
5
 
6
6
  ### 発生している問題・エラーメッセージ
7
7
 
8
8
  ```
9
9
  There was an unexpected error (type=Internal Server Error, status=500).
10
- org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [SELECT * FROM product WHERE productCode LIKE :productCode AND productName LIKE :productName ]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [SELECT * FROM product WHERE productCode LIKE :productCode AND productName LIKE :productName ]
11
- org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [SELECT * FROM product WHERE productCode LIKE :productCode AND productName LIKE :productName ]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [SELECT * FROM product WHERE productCode LIKE :productCode AND productName LIKE :productName ]
10
+ org.hibernate.hql.internal.ast.QuerySyntaxException: product is not mapped [SELECT p FROM product p WHERE p.productCode LIKE :productCode ]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: product is not mapped [SELECT p FROM product p WHERE p.productCode LIKE :productCode ]
11
+ org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: product is not mapped [SELECT p FROM product p WHERE p.productCode LIKE :productCode ]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: product is not mapped [SELECT p FROM product p WHERE p.productCode LIKE :productCode ]
12
12
  ```
13
13
 
14
14
  ### 該当のソースコード
15
15
 
16
16
  ```service
17
- package com.example.demo.domain.service;
18
-
19
- import java.util.List;
20
-
21
- import org.springframework.beans.factory.annotation.Autowired;
22
- import org.springframework.stereotype.Service;
23
-
24
- import com.example.demo.domain.model.Product;
25
- import com.example.demo.domain.repository.ProductDao;
26
- import com.example.demo.domain.repository.ProductRepositoryCustom;
27
-
28
17
  @Service
29
18
  public class ProductService {
30
19
 
31
20
  @Autowired
21
+ ProductDao dao;
22
+ @Autowired
32
23
  ProductRepositoryCustom repositoryCustom;
33
24
 
34
- public List<Product> search(String productCode, String productName, int price) {
25
+ public List<Product> search(String productCode, String productName, BigDecimal priceFrom, BigDecimal priceTo) {
35
26
  List<Product> result;
36
- if ("".equals(productCode) && "".equals(productName)) {
27
+ if ("".equals(productCode) && "".equals(productName) && priceFrom == null && priceTo == null) {
37
28
  result = dao.findAll();
38
29
  } else {
39
- result = repositoryCustom.search(productCode, productName, price);
30
+ result = repositoryCustom.search(productCode, productName, priceFrom, priceTo);
40
31
  }
41
32
  return result;
42
33
  }
43
34
 
44
35
  ```
45
36
  ```repository
46
- package com.example.demo.domain.jdbc;
37
+ package com.example.demo.domain.repository;
47
38
 
39
+ import java.math.BigDecimal;
48
40
  import java.util.List;
49
41
 
50
- import javax.persistence.EntityManager;
42
+ import com.example.demo.domain.model.Product;
51
- import javax.persistence.Query;
52
43
 
53
- import org.springframework.beans.factory.annotation.Autowired;
54
- import org.springframework.stereotype.Repository;
44
+ public interface ProductRepositoryCustom {
45
+ public List<Product> search(String productCode, String productName, BigDecimal priceFrom, BigDecimal priceTo);
46
+ }
55
47
 
56
- import com.example.demo.domain.model.Product;
57
- import com.example.demo.domain.repository.ProductRepositoryCustom;
58
48
 
49
+ ```
50
+ ```repository
59
51
  @Repository
60
52
  public class ProductRepositoryCustomImpl implements ProductRepositoryCustom {
61
53
 
@@ -64,15 +56,15 @@
64
56
 
65
57
  @SuppressWarnings("unchecked")
66
58
  @Override
67
- public List<Product> search(String productCode, String productName, int price) {
59
+ public List<Product> search(String productCode, String productName, BigDecimal priceFrom, BigDecimal priceTo) {
68
60
  StringBuilder sql = new StringBuilder();
69
- sql.append("SELECT * FROM product WHERE ");
61
+ sql.append("SELECT p FROM product p WHERE ");
70
62
  boolean andFlg = false;
71
63
  boolean productCodeFlg = false;
72
- boolean productCodeNameFlg = false;
64
+ boolean priceFromFlg = false;
73
- boolean priceFlg = false;
65
+ boolean priceToFlg = false;
74
66
  if (!"".equals(productCode) && productCode != null) {
75
- sql.append(" productCode LIKE :productCode ");
67
+ sql.append(" p.productCode LIKE :productCode ");
76
68
  productCodeFlg = true;
77
69
  andFlg = true;
78
70
  }
@@ -80,16 +72,33 @@
80
72
  if (!"".equals(productName) && productName != null) {
81
73
  if (andFlg)
82
74
  sql.append(" AND ");
83
- sql.append("productName LIKE :productName ");
75
+ sql.append("p.productName LIKE :productName ");
84
76
  productNameFlg = true;
85
77
  andFlg = true;
86
78
  }
87
-
79
+ if (priceFrom != null) {
80
+ if (andFlg)
81
+ sql.append(" AND ");
82
+ sql.append("p.price >= :priceFrom ");
83
+ priceFromFlg = true;
84
+ andFlg = true;
85
+ }
86
+ if (priceTo != null) {
87
+ if (andFlg)
88
+ sql.append(" AND ");
89
+ sql.append("p.price <= :priceTo ");
90
+ priceToFlg = true;
91
+ andFlg = true;
92
+ }
88
93
  Query query = manager.createQuery(sql.toString());
89
94
  if (productCodeFlg)
90
95
  query.setParameter("productCode", "%" + productCode + "%");
91
96
  if (productNameFlg)
92
97
  query.setParameter("productName", "%" + productName + "%");
98
+ if (priceFromFlg)
99
+ query.setParameter("priceFrom", priceFrom);
100
+ if (priceToFlg)
101
+ query.setParameter("priceTo", priceTo);
93
102
  return query.getResultList();
94
103
  }
95
104
 
@@ -113,8 +122,8 @@
113
122
  <tr><td>商品コード : <input type="text" class="form-control" id="productCode" name="productCode" th:value="${productCode}"/></td></tr>
114
123
  <tr><td>商品名 : <input type="text" class="form-control" id="productName" name="productName" th:value="${productName}"/></td></tr>
115
124
  <tr>
116
- <td>価格帯 : <input type="text" class="form-control" id="price_from" name="priceFrom" th:value="${priceFrom}"/>
125
+ <td>価格帯 : <input type="text" class="form-control" id="priceFrom" name="priceFrom" th:value="${priceFrom}"/>
117
- ~ <input type="text" class="form-control" id="price_to" name="priceTo" th:value="${priceTo}"/></td>
126
+ ~ <input type="text" class="form-control" id="priceTo" name="priceTo" th:value="${priceTo}"/></td>
118
127
  </tr>
119
128
  <tr><td><input type="submit" value="検索"/></td></tr>
120
129
  </table>
@@ -135,4 +144,11 @@
135
144
  </div>
136
145
  </body>
137
146
  </html>
147
+ ```
148
+ ```DB
149
+ /* 商品マスタのデータ */
150
+ insert into product(productCode,productName,price)
151
+ values
152
+ ('A0001','商品A',10000)
153
+ ;
138
154
  ```

1

不要な文の削除

2020/05/22 07:33

投稿

TaSa
TaSa

スコア1

title CHANGED
File without changes
body CHANGED
@@ -135,13 +135,4 @@
135
135
  </div>
136
136
  </body>
137
137
  </html>
138
- ```
138
+ ```
139
-
140
-
141
- ### 試したこと
142
-
143
- ここに問題に対して試したことを記載してください。
144
-
145
- ### 補足情報(FW/ツールのバージョンなど)
146
-
147
- ここにより詳細な情報を記載してください。