□環境情報□
macOS:10.14.2
spring boot:2.1
Docker:version 18.09.1
mysql:8.0
やりたいこと
dockerにて構築したmysql環境から値を取得し画面に表示する
※docker環境の中のmysqlの今回の対象のテーブル情報を以下に載せます
現状
findAll()メソッドにて値が取得できない
ソース情報
データベース名:demo
テーブル名:Account
カラム:id,email,password
以下デバッグ画像のfindAll()にてカラムid,email,passwordが取りたいのに、、、sizeが0で返ってくる。
その他ソース
githubリンク
※findAll()はこちら側で別個定義が必要なのでしょうか?
それともDBと連携ができていない?
ご意見を宜しくお願いいたします。
applicationproperties
1spring.datasource.url=jdbc:mysql://localhost:3306/demo?useSSL=false 2spring.datasource.username=root 3spring.datasource.password=p@ssw0rd 4spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 5spring.jpa.database=MYSQL 6spring.jpa.hibernate.ddl-auto=update
Entity
1package com.example.demo; 2 3import lombok.Data; 4 5import javax.persistence.Column; 6import javax.persistence.Entity; 7import javax.persistence.Id; 8import javax.persistence.Table; 9 10@Entity 11@Table(name = "Account") 12@Data 13public class AccountEntiry { 14 15 @Column 16 @Id 17 private int id; 18 19 @Column 20 private String email; 21 22 @Column 23 private String password; 24 25} 26
Repository
1package com.example.demo; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4import org.springframework.stereotype.Repository; 5 6@Repository 7public interface AccountRepository extends JpaRepository<AccountEntity,Integer> { 8} 9
Service
1package com.example.demo; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.stereotype.Service; 5 6@Service 7public class AccountService { 8 @Autowired 9 AccountRepository accountRepository; 10 11 12} 13
Controller
1package com.example.demo; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.stereotype.Controller; 5import org.springframework.ui.Model; 6import org.springframework.web.bind.annotation.RequestMapping; 7import org.springframework.web.bind.annotation.RequestMethod; 8 9import java.util.Collection; 10import java.util.Iterator; 11import java.util.List; 12import java.util.ListIterator; 13 14@Controller 15@RequestMapping("/") 16public class IndexController { 17 @Autowired 18 AccountRepository accountRepository; 19 20 @RequestMapping(value = "/", method = RequestMethod.GET) 21 public String index(Model model) { 22 List<AccountEntiry> emplist=accountRepository.findAll(); 23 model.addAttribute("emplist", emplist); 24 25 model.addAttribute("message", "Hello Springboot"); 26 return "index"; 27 28 } 29} 30
■修正情報■
■1/31■成果振り返り
まず、JpaRepository<Account,String>としていたものをidの属性であるJpaRepository<Account,Integer>へ変更。
デバッグ実行後、事象変わらず、、、SimpleJpaRepositoryを掘っていたら以下のエラーが出ていることが判明。
Error
1Method threw 'java.lang.IllegalStateException' exception. Cannot evaluate com.sun.proxy.$Proxy84.toString()
■2/1■成果振り返り
空いていたWindowsPCでローカル環境に直接MySql環境を構築し同じプロジェクトをgithubより落としてきて実行した。
→データベース連携成功...
dockerと何が違うのか...
以下Windowsでのデバッグ時画面とMacでの同じ場所での画像比較
■Windows
■Mac
Macでは以下のエラーが出ている。
((SimpleJpaRepository)((SingletonTargetSource)((ProxyFactory)((JdkDynamicAopProxy)this.h).advised).t = No such instance field: 'h'
■2/2■成果振り返り
前回まででMysqlをローカルで環境構築してアプリケーションの動作がどうなるかを検証しました。
Windowsにて検証を行ったのですが同じソース、同じデータベース構造でデータベースの内容を画面へ表示することができました。
dockerとローカルで何が違うのか...
~~### 現在詰まっている箇所
ローカルで実行した際には出ないエラーの調査をしています。
((SimpleJpaRepository)((SingletonTargetSource)((ProxyFactory)((JdkDynamicAopProxy)this.h).advised).t = No such instance field: 'h'
hフィールドを探す
hどこやねん
/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/lib/src.zip!/java.base/java/lang/reflect/Proxy.java
hフィールドのエラー関係ない!!!!!!!
・macのローカル環境あんまり汚したくなかったけど仕方なくローカルにMysql環境構築しデータベース連携できるか確認
→連携成功。。。やはりdockerの設定に問題がある模様。
そして散々調べていたhフィールドですが、これはmac環境固有のもの?らしく、こちらが発生していてもデータベースとの連携は下図のように成功していました。。。
2月2日現状...どのように切り分けするべきかわからなくなっております。。。。ご意見をください。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー