2016-05-25 5 views
3

私はSpringBunでSpringデータを扱っています。 JavaConfigのドキュメントではSpring JPAの設定を行っていますが、リポジトリ内のsaveメソッドを呼び出すときにnullポインタがスローされます。春のデータJPAリポジトリから空のポインタが返される

マイリポジトリ:

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レポをとるサービスオブジェクトを持っていますsitoryと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); 
} 
} 

私は春のデータにかなり新しいですので、私は私が設定内にその何かを思います行方不明、アドバイスをいただければ幸いです!

--Update--

スタックトレース:

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

を呼び出しています
+0

例外のスタックトレースを正確に表示します。そして、あなたは 'HouseService.save'メソッドをどのように呼びますか? – Nikem

+0

今投稿を編集しました。 –

+0

少なくともコンパイルするコードをお知らせください。 'hm'を宣言する前に' vmComp'が宣言されていません... – Nikem

答えて

2

現在、HouseServiceは、Springではなく、手作業でインスタンス化しています。作成したhouseServiceオブジェクトには、フィールドHouseRepository houseRepositorynull)があります。これはどのような方法でも初期化しないためです。 SpringとそのAutowired機能を使用する場合、SpringコンテキストからHouseServiceのインスタンスを取得する必要があります。例えば。それをコントローラクラスに@Autowiredすることができます。

+0

これは私が混乱していると思うところです。私はアプリケーションの文脈でそれを設定したと信じていたサービスに注釈を付けました。私がhouseService = new HouseService()を取り出した場合。ヌルポインタはHouseServiceクラスに移動します。これはコンテキストを定義することに戻ります。 –

+0

いいえ、サーバーに注釈を付けるだけで自動的にSpringコンテキストが作成されたり開始されることはありません。 Springのドキュメントにその方法をご相談ください。 – Nikem

+0

次を参照してください:https://spring.io/guides/gs/spring-boot/ 登録済みのすべてのBeanを出力するコードを追加しました。アプリケーションコンテキスト内にhouseRepository&houseService Beanが表示されます。だから、彼らは正しく登録されているようですが、私はクラス内でアクセスできません。 –

1

これは正しくありません:

houseService = new HouseService(); 

あなたがSpringを使用しているので、あなたは春にはすべてのBeanを作成できるようにする必要があり、それはこの場合に実行されるとhouseRepositoryがnullとしてinitialisedで取得されていない@Autowiredを、使用しての理由です。

関連する問題