私はSpring BootでSpring Dataを使用しています。 JavaConfigドキュメントでSpring JPA構成をセットアップしましたが、リポジトリーでsaveメソッドを呼び出すと、nullポインターがスローされます。
私のリポジトリ:
import org.springframework.data.jpa.repository.JpaRepository;
public interface HouseRepository extends JpaRepository<House, Long> {
}
私のPOJO:
AbstractHouse
@MappedSuperclass
@Table(name="houses")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public abstract class AbstractHouse implements Serializable {
@NotEmpty
private String houseName;
@NotEmpty
private String houseNumber;
家
@Entity
public class SmallHouse extends AbstractHouse {
@Id
@GeneratedValue
private Long id;
private Date created;
private Date updated;
次に、Autowiredリポジトリーを取得し、JPAを通じて取得したメソッドを使用して保存を試みるサービスオブジェクトを取得します。
@Service
public class HouseService {
@Autowired
protected HouseRepository houseRepository;
public void save(House house) {
houseRepository.save(house);
}
私のアプリケーションクラスには以下が含まれます。
@SpringBootApplication
@EnableScheduling
@EnableJpaRepositories
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
私はSpring Dataをかなり初めて使用しているので、構成内に欠けているものだと思います。アドバイスをいただければ幸いです。
- 更新 -
スタックトレース:
Java.lang.NullPointerException
at com.jm.service.HouseService.save(HouseService.Java:15)
at com.jm.service.HouseClass.gatherHouses(HouseClass.Java:43)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:497)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.Java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.Java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.Java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.Java:775)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.Java:705)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.Java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.Java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.Java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:967)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.Java:858)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.Java:843)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:729)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:291)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
at org.Apache.Tomcat.websocket.server.WsFilter.doFilter(WsFilter.Java:52)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:239)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.Java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.Java:107)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:239)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.Java:85)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.Java:107)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:239)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:217)
at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:106)
at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:502)
at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:142)
at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:79)
at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:88)
at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:518)
at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1091)
at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:673)
at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1500)
at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1456)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
at org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
at Java.lang.Thread.run(Thread.Java:745)
そして、私はそのようにメソッドを呼び出します:
public class HouseMain {
@Autowired
public HouseService houseService;
public void gatherHouse() {
houseService = new HouseService();
House h = new House();
h.setHouseName("House1");
h.setHouseNumber("12");
try {
HouseService.save(vmComp);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
次に、私のコントローラーでhouse.gatherHouseを呼び出します
現在、Springではなく手動でHouseService
をインスタンス化しています。作成したhouseService
オブジェクトには、フィールドHouseRepository houseRepository
はnull
です。これは、いかなる方法でも初期化しないためです。 SpringとそのAutowired
機能を使用する場合は、SpringコンテキストからHouseService
のインスタンスを取得する必要があります。例えば。あなたはできる @Autowired
それをコントローラークラスに追加します。
これは正しくありません:
houseService = new HouseService();
Spring
を使用しているので、SpringがすべてのBeanを作成できるようにする必要があります。これが@Autowired
を使用する理由です。この場合、実行されず、houseRepositoryはinitialised
としてnull
。