0

В сессию приходит null, уже запутался в конец.

interface DAO:

public interface HumanDao {

    List<Human> getAll() throws DaoException;

    List<Human> getAllById(long id) throws DaoException;

}

impl interface:

public class HumanDaoImplHibernate implements HumanDao{

    private SessionFactory sesionFactory;

    public void setSesionFactory(SessionFactory sesionFactory) {
        this.sesionFactory = sesionFactory;
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Human> getAll() throws DaoException {
        try{
        Session session = this.sesionFactory.getCurrentSession();// here come is null!
        List<Human> personsList = session.createQuery("from Human").list();
        return personsList;
        }catch(NullPointerException e){
            System.out.println("cause: "+e.getCause());
        }
        return null;
    }

    @Override
    public List<Human> getAllById(long id) throws DaoException {
        // TODO Auto-generated method stub
        return null;
    }
}

Junit test:

public class HumanHibTest {

    @Test
    public void getAll() throws DaoException{
        HumanDaoImplHibernate hib = new HumanDaoImplHibernate();
        hib.getAll();
    }
}

Тестом дергаю метод HumanDaoImplHibernate.java и при детальном изучении SessionFactory в дебаге приходит null:
введите сюда описание изображения

В чем ошибка, где корень зла? Помогите плиз.


Валидатор не пропустил остальной код: hibernate.cfg.xml:

<session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.username">postgres</property>
    <property name="hibernate.connection.password">123</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/test</property>

    <property name="connection_pool_size">1</property>

    <property name="hbm2ddl.auto">create</property>

    <property name="show_sql">true</property>

    <mapping class="com.datapeople.bean.Address"/>
    <mapping class="com.datapeople.bean.Human"/>
    <mapping class="com.datapeople.bean.StreetDirectory"/>
</session-factory>


 Hibernate instance:

 public class HibernateCongigurator {

    private static HibernateCongigurator instance;
    private SessionFactory sesionFactory;

    public static HibernateCongigurator getInstance() {
        if (instance == null) {
            synchronized (HibernateCongigurator.class) {
                if (instance == null) {
                    instance = new HibernateCongigurator();
                }
            }
        }
        return instance;
    }

    private HibernateCongigurator() {
        sesionFactory = new Configuration().configure().buildSessionFactory();
    }

    public SessionFactory getConfiguration() {
        return sesionFactory;
    }

}
Evgen
  • 21
  • у вас же HumanDaoImplHibernate.sesionFactory присваивается только в setSesionFactory, который нигде не вызывается. – zRrr Oct 26 '17 at 10:25
  • не совсем понимаю что Вы имеете ввиду. Сам setSesionFactory я передаю в session. – Evgen Oct 26 '17 at 12:55

2 Answers2

2

Разобрался в HumanDaoImplHibernate надо вместо сеттера сделать конструктор и передать sesionFactory

Evgen
  • 21
0

У меня нашлись проблемы с pom.xml

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.1.214</version>
</dependency>

После этой зависимости Null пропадает

Yukius
  • 1
  • 1
    Каким образом добавление зависимости на H2Database позволило бы решить проблему 6-летней давности с PostgreSQL? – Nowhere Man Dec 11 '23 at 23:34