Исключение нулевого указателя отношения один ко многим

0

Я разбираю некоторые элементы из html файла с веб-сайта, конвертируя их в объекты и добавляя их в свою базу данных, у меня нет проблем при анализе и создании объектов типа игры, я также могу добавлять командные объекты соответственно каждой игре (одна одно отношение, поэтому в одной игре есть одна команда хозяев и одна команда, которые являются командами типа). Когда я пытаюсь добавить эти игровые/командные объекты в уже существующую лигу в базе данных, которая имеет отношение "один к большому" с игрой и командой, я получаю следующую ошибку: (обратите внимание, что я использую springs mvc framework)

java.lang.NullPointerException: null
    at com.FYP.Club.controller.HomeController.addNewPost(HomeController.java:98) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_60]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_60]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_60]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_60]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_60]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_60]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.23.jar:8.5.23]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_60]

Я также изучил это исключение в других потоках при переполнении стека (например, что такое исключение NullPointerException и как его исправить?)

Я понимаю концепцию ошибки, но не могу определить правильный способ инициализации объекта лиги. Спасибо!

Вот мой контроллер:

@Controller
public class HomeController {


  @Autowired
    UserLoginRepository userRepository;

  @Autowired
        TeamRepository teamRepository;

  @Autowired
    GameRepository gameRepository;

  @Autowired
        LeagueRepository leagueRepository;



  @RequestMapping(value="/parsegames", method=RequestMethod.GET)
    public String index(Game game) {
        return "parseGame";

    }

  @RequestMapping(value = "/parsegames", method = RequestMethod.POST)
    public String addNewPost(@Valid Model model) throws IOException {

      Document doc = Jsoup.connect("http://www.irishrugby.ie/club/ulsterbankleagueandcup/fixtures.php").get();


      Elements kelime = doc.select("tr[id^=fixturerow]");
        for(Element sectd:kelime){
            Elements tds = sectd.select("td"); 

                  String result = tds.get(0).text();
                   String result1 = tds.get(1).text();
                   String result2 = tds.get(2).text();
                   String result3 = tds.get(3).text();
                   String result4 = tds.get(4).text();
                   String result5 = tds.get(5).text();
                   String result6 = tds.get(6).text();
                   String result7 = tds.get(7).text();


                   //creates a new game object
                   Game game = new Game();


                   game.setDatePlayed(result);
                   game.setFinalScore(result4);

                   //searches db for team with the name then adds the team 
 to the game homeside
                   Team team = teamRepository.findByTeamName(result3);
                   game.setHomeSide(team);


                   Team team2 = teamRepository.findByTeamName(result5);
                   game.setAwaySide(team2);

                   //saves full game info to db
                   gameRepository.save(game);

            League league = leagueRepository.findByLeagueName(result2);
                 league.setLeagueName("Still");
                 league.setDivision(result2);
                 league.setSeason("17/18");
                 league.addTeam(team);
                 league.addTeam(team2);
                 league.addGame(game);
                 leagueRepository.save(league); 






        }

        return "parseresult";

    }

Вот ссылка leagueRepository:

@Repository
public interface LeagueRepository extends JpaRepository<League, Long> {

    League findByLeagueName(String leaguename);


}

Вот мой класс лиги:

@Entity
public class League {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int leagueId;
    private String season;
    private String leagueName;
    private String division;

    // league has many matches and is one to many with teams

    @OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
     public Set<Game> games;


    @OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
     public Set<Team> teams;

    public League()
    {

    }

    public League(String leagueName, String division, String season) {
        super();
        this.season = season;
        this.leagueName = leagueName;
        this.division =  division;
    }





    public League(int leagueId, String season, String leagueName,
            String division, Set<Game> games, Set<Team> teams) {
        super();
        this.leagueId = leagueId;
        this.season = season;
        this.leagueName = leagueName;
        this.division = division;
        this.games = games;
        this.teams = teams;
    }

    public String getDivision() {
        return division;
    }

    public void setDivision(String division) {
        this.division = division;
    }

    public int getLeagueId() {
        return leagueId;
    }

    public void setLeagueId(int leagueId) {
        this.leagueId = leagueId;
    }

    public String getSeason() {
        return season;
    }

    public void setSeason(String season) {
        this.season = season;
    }

    public String getLeagueName() {
        return leagueName;
    }

    public void setLeagueName(String leagueName) {
        this.leagueName = leagueName;
    }

    public Set<Game> getGames() {
        return games;
    }

    public void setGames(Set<Game> games) {
        this.games = games;
    }

    public Set<Team> getTeams() {
        return teams;
    }

    public void setTeams(Set<Team> teams) {
        this.teams = teams;
    }

       public void addTeam(Team team){
            teams.add(team);
        }

       public void addGame(Game game){
            games.add(game);
        }




}
Теги:
model-view-controller
spring
repository

2 ответа

0
Лучший ответ

Вы использовали findByDivision вместо findByLeagueName, чтобы извлечь объект League из базы данных.
Вышеприведенный результат был result2 из обсуждения в разделе комментариев и после наблюдения использования переменной result2.

1

В свой League.class добавьте следующее:

@OneToMany(cascade=CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
public Set<Game> games = new HashSet();

вместо

@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
public Set<Game> games;
  • 1
    Спасибо mrkernelpanic за ответ, я внес изменения, которые вы предложили, пересоздал мою базу данных, перезапустил приложение, и я все еще получаю ту же ошибку

Ещё вопросы

Сообщество Overcoder
Наверх
Меню