首页 > 解决方案 > DAO 中的 NullPointerException,sessionFactory

问题描述

帮助,当我在 getTeamFromDB 方法中访问 DAO 时出现 NullPointerException。可能是什么原因?调试器对 GenericDao 类中的 getSession() 方法发誓。

通用道

    @Repository
    @Transactional
    public abstract class GenericDao<T> {

    @Autowired
    protected SessionFactory sessionFactory;

    public abstract T get(T object);

    public abstract List<T> getAll();

    public boolean isExist(T object) {
        return get(object) != null;
    }

    public void save(T object) {
        getSession().save(object);
    }

    public void update(T object) {
        getSession().update(object);
    }

    public void delete(T object) {
        getSession().delete(object);
    }

    protected Session getSession() {
        return sessionFactory.getCurrentSession();
    }
    }

队道

    @Repository
    @Transactional
    public class TeamDao extends GenericDao<TeamEntity>  {

    public TeamEntity get(String teamName){
        Session session = getSession();
        Query query = session.createQuery("from TeamEntity team where team.name=:teamName");
        query.setParameter("teamName", teamName);
        return (TeamEntity) query.uniqueResult();
    }

    @Override
    public TeamEntity get(TeamEntity team) {
        return get(team.getName());
    }

    @Override
    public List<TeamEntity> getAll() {
        Session session = getSession();
        Criteria criteria = session.createCriteria(TeamEntity.class);
        criteria.addOrder(Order.asc("name"));
        return criteria.list();
    }

    public List<TeamEntity> getAllNotOrder() {
        Session session = getSession();
        Criteria criteria = session.createCriteria(TeamEntity.class);
        return criteria.list();
    }
    }

HltvMatchesStatParser

    @Service
    public class HltvMatchesStatParser {
    private final int START_CHILD = 5;

    @Autowired
    private MatchDao matchDao;
    @Autowired
    private TeamDao teamDao;
    @Autowired
    private StatisticDao statisticDao;
    private final static String URL = "https://www.hltv.org/results";

    public void parse() {
        try {
            Document doc = Jsoup.connect(URL)
                    .userAgent("Chrome/4.0.249.0 Safari/532.5")
                    .referrer("http://google.com").get();

            Elements elements = doc.getElementsByClass("result-con");
            List<MatchEntity> matchModelList = new ArrayList<>();

            for (Element element : elements) {
                Integer scorelost = Integer.valueOf(element
                        .getElementsByClass("score-lost")
                        .get(0).text());
                Integer scorewon = Integer.valueOf(element
                        .getElementsByClass("score-won")
                        .get(0).text());
                String teams[] = element.getElementsByClass("team")
                        .stream().map(Element::text)
                        .collect(Collectors.toList()).toArray(new String[]{});

                MatchEntity model = new MatchEntity();

                String team1Name = teams[0];
                model.setTeam1(getTeamFromDB(team1Name));

                String team2Name = teams[1];
                model.setTeam2(getTeamFromDB(team2Name));
                model.setScore1(scorelost);
                model.setScore2(scorewon);

                matchModelList.add(model);

                addMatch(model);
            }

            matchModelList.forEach(System.out::println);

        } catch (IOException e) {
            System.out.println("Document not found");
        }

    }

...

private TeamEntity getTeamFromDB(String teamName) {
        TeamEntity team = teamDao.get(teamName);

        if (team == null) {
            team = new TeamEntity();
            team.setName(teamName);
            team.setMatches(0);
            team.setWins(0);
            teamDao.save(team);

            team = teamDao.get(teamName);

            System.out.println("Team add : " + teamName);
        }

        return team;
    }

所有设置都位于此处。

数据源.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/tx
 http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">


        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/home"/>
        <property name="username" value="root"/>
        <property name="password" value="Root123456789"/>
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan">
            <list>
                <value>com.lounge.stat.model</value>
                <value>com.lounge.stat.controller</value>
                <value>com.lounge.stat.dto</value>
                <value>com.lounge.stat.repository</value>
                <value>com.lounge.stat.service</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/home</prop>
                <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <!--<prop key="hibernate.hbm2ddl.auto">update</prop> -->
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
            </props>
        </property>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

</beans>

如果需要更多文件,我会添加。谢谢

标签: javaxmlspringhibernatenullpointerexception

解决方案


推荐阅读