質問編集履歴

4

最初の質問は解決。別問題が似た内容であったため、編集し直しました。

2018/09/11 07:29

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 【Spring Boot】【JPA】テーブルの結合がうまくいかない
1
+ 【Spring Boot】【JPA】QuerySyntaxException出てしま
test CHANGED
@@ -6,11 +6,11 @@
6
6
 
7
7
  ```SQL
8
8
 
9
- select a.id, a.name as user_name, b.name as category_name
9
+ select a.id, a.username , b.name as category_name, a.created_at
10
10
 
11
11
  from user a
12
12
 
13
- left join category b
13
+ inner join category b
14
14
 
15
15
  on a.category_id = b.id
16
16
 
@@ -18,17 +18,29 @@
18
18
 
19
19
 
20
20
 
21
- また、本SQLにlimit句、offset句が引数で渡されている場合はどのようにしたら良いのでしょう?
21
+ ### 問題・エラーメッセージ
22
-
23
- どちらもint型で指定がない場合は0が渡ってきて、どちらも0の場合はlimit句、offset句を定義しないようにしたいです。
24
22
 
25
23
 
26
24
 
27
- ### 該当のソースコード
25
+ ```
26
+
27
+ There was an unexpected error (type=Internal Server Error, status=500).
28
+
29
+ org.hibernate.hql.internal.ast.QuerySyntaxException: user is not mapped [SELECT a.id, a.username, b.name as category_name, a.created_at FROM user a INNER JOIN category b ON a.category_id = b.id]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: user is not mapped [SELECT a.id, a.username, b.name as category_name, a.created_at FROM user a INNER JOIN category b ON a.category_id = b.id]
30
+
31
+ ```
28
32
 
29
33
 
30
34
 
35
+ どこが間違っているでしょうか?
36
+
37
+
38
+
39
+ ### 試したこと
40
+
41
+
42
+
31
- User.java
43
+ Test.java
32
44
 
33
45
  ```Java
34
46
 
@@ -36,29 +48,17 @@
36
48
 
37
49
  @Entity
38
50
 
39
- @Table(name="user")
51
+ @AllArgsConstructor
40
52
 
41
- public class User {
53
+ public class Test {
42
-
43
- @Id
44
-
45
- @Column
46
54
 
47
55
  private long id;
48
56
 
57
+ private String username;
49
58
 
59
+ private String category_name;
50
60
 
51
- @Column
52
-
53
- private String name;
54
-
55
-
56
-
57
- @ManyToOne(cascade = CascadeType.ALL)
58
-
59
- @JoinColumn(referencedColumnName="id",name="category_id", insertable = false,updatable = false)
60
-
61
- private Category category;
61
+ private Date created_at;
62
62
 
63
63
  }
64
64
 
@@ -66,29 +66,15 @@
66
66
 
67
67
 
68
68
 
69
- Category.java
69
+ TestRepository.java
70
70
 
71
71
  ```Java
72
72
 
73
- @Data
73
+ @Repository
74
74
 
75
- @Entity
75
+ public interface TestRepository {
76
76
 
77
- @Table(name = "category")
78
-
79
- public class Category {
77
+ public List<Test> findAll();
80
-
81
- @Id
82
-
83
- @Column
84
-
85
- private Long id;
86
-
87
-
88
-
89
- @Column
90
-
91
- private String name;
92
78
 
93
79
  }
94
80
 
@@ -96,33 +82,43 @@
96
82
 
97
83
 
98
84
 
99
- とModelに関してはこのように作ってみましたがRepositoryに関してが
85
+ TestRepositoryImpl.java
100
86
 
87
+ ```Java
88
+
89
+ @Component
90
+
91
+ public class TestRepositoryImpl implements TestRepository {
92
+
93
+ @Autowired
94
+
101
- 現状調べつつなのですが、どのような記載になれば良いのかわからず・・・
95
+ EntityManager entityManager;
102
96
 
103
97
 
104
98
 
105
- ### 試したこと
99
+ @SuppressWarnings("unchecked")
106
100
 
107
- Repositoryを以下のように組んでみてますが、そもそも組み方が違うなどご教示いただければと思います。
101
+ @Override
108
102
 
109
- TestRepository.java
103
+ public List<Test> findAll() {
110
104
 
111
- ```Java
105
+ StringBuilder sql = new StringBuilder();
112
106
 
113
- public interface TestRepository extends JpaRepository<User, Long> {
107
+ sql.append("SELECT a.id, a.username, b.name as category_name, a.created_at ");
114
108
 
115
- @Query(value = "a.id, a.name as user_name, b.name as category_name"
109
+ sql.append("FROM user a ");
116
110
 
117
- + "from user a"
111
+ sql.append("INNER JOIN category b ");
118
112
 
119
- + "left join category b"
113
+ sql.append("ON a.category_id = b.id");
120
114
 
121
- + "on a.category_id = b.id",
122
115
 
123
- nativeQuery = true)
124
116
 
117
+ Query query = entityManager.createQuery(sql.toString());
118
+
125
- List<User> findByUser();
119
+ return query.getResultList();
120
+
121
+ }
126
122
 
127
123
  }
128
124
 

3

質問内容修正・追記

2018/09/11 07:29

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -15,6 +15,12 @@
15
15
  on a.category_id = b.id
16
16
 
17
17
  ```
18
+
19
+
20
+
21
+ また、本SQLにlimit句、offset句が引数で渡されている場合はどのようにしたら良いのでしょう?
22
+
23
+ どちらもint型で指定がない場合は0が渡ってきて、どちらも0の場合はlimit句、offset句を定義しないようにしたいです。
18
24
 
19
25
 
20
26
 

2

タイトル変更

2018/09/11 01:11

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 【Spring Boot】【JPA】テーブルの結合のやり方ない
1
+ 【Spring Boot】【JPA】テーブルの結合がうまくいかない
test CHANGED
File without changes

1

Repositoryクラスの中身修正

2018/09/11 01:08

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -106,7 +106,17 @@
106
106
 
107
107
  public interface TestRepository extends JpaRepository<User, Long> {
108
108
 
109
+ @Query(value = "a.id, a.name as user_name, b.name as category_name"
110
+
111
+ + "from user a"
112
+
113
+ + "left join category b"
114
+
115
+ + "on a.category_id = b.id",
116
+
117
+ nativeQuery = true)
118
+
109
- Optional<User> findByAll();
119
+ List<User> findByUser();
110
120
 
111
121
  }
112
122