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

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

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

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Java

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

Spring

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

Q&A

解決済

1回答

6549閲覧

SpringBoot JdbcTemplateがnullPointerExceptionで落ちる

kai_nullpo

総合スコア19

NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Java

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

Spring

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

0グッド

0クリップ

投稿2019/05/15 03:05

編集2019/05/15 04:01

前提・実現したいこと

SpringToolSuiteを学習しています
現在JdbcTemplateを使用してDBから値を取得するところで
JdbcTemplateのインスタンス変数がNullPointerExceptionで
システムが落ちてしまいます。

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

起動からエラーまでの流れです。

2019-05-14 17:58:19.182 INFO 10361 --- [ main] R.manager.ClientManagerApplication : Starting ClientManagerApplication on xxxxxx.local with PID 10361 (/Users/xxxxxx/Documents/workspace-spring-tool-suite-4-4.2.1.RELEASE/client_manager/target/classes started by xxxxxxx in /Users/xxxxxxxx/Documents/workspace-spring-tool-suite-4-4.2.1.RELEASE/client_manager) 2019-05-14 17:58:19.184 INFO 10361 --- [ main] R.manager.ClientManagerApplication : No active profile set, falling back to default profiles: default 2019-05-14 17:58:19.724 INFO 10361 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode. 2019-05-14 17:58:19.788 INFO 10361 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 53ms. Found 2 repository interfaces. 2019-05-14 17:58:20.085 INFO 10361 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$61bd410a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2019-05-14 17:58:20.353 INFO 10361 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2019-05-14 17:58:20.377 INFO 10361 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2019-05-14 17:58:20.377 INFO 10361 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.17] 2019-05-14 17:58:20.485 INFO 10361 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2019-05-14 17:58:20.485 INFO 10361 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1268 ms 2019-05-14 17:58:20.627 INFO 10361 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2019-05-14 17:58:20.884 INFO 10361 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2019-05-14 17:58:20.942 INFO 10361 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [ name: default ...] 2019-05-14 17:58:20.996 INFO 10361 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.3.9.Final} 2019-05-14 17:58:20.997 INFO 10361 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found 2019-05-14 17:58:21.110 INFO 10361 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.4.Final} 2019-05-14 17:58:21.197 INFO 10361 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect 2019-05-14 17:58:21.653 INFO 10361 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2019-05-14 17:58:22.090 INFO 10361 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2019-05-14 17:58:22.123 WARN 10361 --- [ main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2019-05-14 17:58:22.336 INFO 10361 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-05-14 17:58:22.340 INFO 10361 --- [ main] R.manager.ClientManagerApplication : Started ClientManagerApplication in 3.386 seconds (JVM running for 8.81) 2019-05-14 17:59:05.061 INFO 10361 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2019-05-14 17:59:05.061 INFO 10361 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2019-05-14 17:59:05.071 INFO 10361 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 10 ms 2019-05-14 17:59:17.292 ERROR 10361 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException: null at Reservation.manager.dao.MemberDAO.queryAccountId(MemberDAO.java:67) ~[classes/:na] at Reservation.manager.Controller.InsertController.insertPost(InsertController.java:64) ~

該当のソースコード

@Repository public class MemberDAO { @Autowired private JdbcTemplate jt; public int queryAccountId() { final String sql = "SELECT MAX(`account_id`) FROM `clientmanagerdb`.`account_info`"; return jt.queryForObject(sql, Integer.class); }
@Controller public class InsertController { @PersistenceContext private EntityManager entityManager; @Autowired private MemberRepository member_info; @Autowired private MemberDAO memberDao; @PostConstruct public void init() { memberDao = new MemberDAO(entityManager); } @RequestMapping(value = "/memberInsert", method = RequestMethod.POST) //POSTデータをAccount,Memberインスタンスとして受け取る public ModelAndView insertPost(@ModelAttribute Account account, @ModelAttribute Member member, ModelAndView mav) { Integer accountId = memberDao.queryAccountId(); member.setAccountId(accountId); //リダイレクト先を指定 mav = new ModelAndView("redirect:/home"); //ModelとView情報を返す return mav; } }

試したこと

Jdbcのバージョンが古いというエラーが出ていたのでアップデート
NamedParameterJdbcTemplateを使用してみた

補足情報(FW/ツールのバージョンなど)

文字数オーバーのためエラーコードの下部を省いています。
Controllerで同様の実装をした際は正常に作動しました。
DAOクラスで作成しようとしたら上記のエラーが発生します。
全て1週間ほど前にインストールしたものなのでバージョンは最新かと思われます。

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

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

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

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

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

m.ts10806

2019/05/15 03:54 編集

MemberDAOを呼び出しているところはどうなってますか?そちらのコードも追記いただければと。
kai_nullpo

2019/05/15 04:01

多少省略してありますが、DAOの呼び出しなどは上記のようにしてあります。
m.ts10806

2019/05/15 04:07

直接的な回答になるか分からないのでこちらに書きますが、 手動でnewすることでAutowiredで注入されたインスタンスがリセットされていると思います。 なので、JdbcTemplateもnullとなるということですね。 引数で渡しているentityManagerがどういう役割か、それをもってMemberDAOでどういう処理が行われているか記載いただくと、私より具体的な回答がつきそうに思います。
kai_nullpo

2019/05/15 04:29

そうなのですね、ありがとうございます。 もう少し具体的に情報をあげれるよう見直してみようと思います。
guest

回答1

0

自己解決

mts10806様が仰られていた通り、Controller側でMemberDAOインスタンスを初期化していたことが問題でした。

@Controller public class InsertController { @PersistenceContext private EntityManager entityManager; @Autowired private MemberRepository member_info; @Autowired private MemberDAO memberDao; //ここを削除 @PostConstruct public void init() { memberDao = new MemberDAO(entityManager); } @RequestMapping(value = "/memberInsert", method = RequestMethod.POST) //POSTデータをAccount,Memberインスタンスとして受け取る public ModelAndView insertPost(@ModelAttribute Account account, @ModelAttribute Member member, ModelAndView mav) { Integer accountId = memberDao.queryAccountId(); member.setAccountId(accountId); //リダイレクト先を指定 mav = new ModelAndView("redirect:/home"); //ModelとView情報を返す return mav; } }

上記のコントローラーのコードです
//ここを削除
という部分を削除することにより正常な動作を確認することができました。
mts10806様をBAにしたいところなのですが、回答のところではないので自己解決という形で
更新させていただきます。ご協力ありがとうございました。

投稿2019/05/15 06:22

kai_nullpo

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問