У меня действительно проблемы с моей конфигурацией, я думаю. Вот проблема. Ican открыть сеанс так:Spring + Hibernatate 4 + Junit 4 Невозможно открыть сеанс автоматической проводки
@Test
public void testSessionFactory()
{
try {
Configuration configuration = new Configuration()
.addClass(com.mcfly.songme.pojo.Sysparameters.class)
.configure();
ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration
.getProperties());
SessionFactory sessionFactory = configuration
.buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
System.out.println("test");
Session session = sessionFactory.openSession();
System.out.println("Test connection with the database created successfuly.");
}catch (Throwable ex) {
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
}
Но если я делать, что сессия никогда не openned:
@Test
public void testFindAll()
{
try {
List<Sysparameters> sys = null;
System.out.println("test");
SysparametersDAO sysDao = new SysparametersDAO();
System.out.println("test");
sys = sysDao.findAll();
System.out.println(sys.size());
} catch (Throwable ex) {
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
}
Мой configuration.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.mcfly.songme.pojo" />
<!-- JDBC data source -->
<!-- <bean id="myDataSource" class="org.springframework.jdb.datasource.DriverManagerDataSource"> -->
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/songme"/>
<property name="maxActive" value="10"/>
<property name="minIdle" value="5"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="validationQuery" value="SELECT 1"/>
</bean>
<!-- hibernate session factory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="packagesToScan" value="com.mcfly.songme.pojo"/>
<property name="configLocation" value="classpath:com/mcfly/songme/pojo/hibernate.cfg.xml" />
</bean>
<!-- Hibernate transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- Activates annotation based transaction management -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
Мой дао файл:
package com.mcfly.songme.pojo;
import java.io.File;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
@Component
public class SysparametersDAO
{
@Autowired(required=true)
@Qualifier("sessionFactory")
private SessionFactory sessionFactory;
private Session session = sessionFactory.getCurrentSession();
@Transactional
public List<Sysparameters> findAll()
{
try {
if(getSessionFactory()==null) {
System.out.println("NULL SESSION FACTORY");
}
session = getSessionFactory().getCurrentSession();
} catch (Exception e) {
e.printStackTrace();
}
@SuppressWarnings("unchecked")
List<Sysparameters> sys = (List<Sysparameters>) session.createQuery("from sysparameters").list();
return sys;
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
My en Tity файл:
package com.mcfly.songme.pojo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
// Generated 8 oct. 2013 16:31:22 by Hibernate Tools 4.0.0
/**
* Sysparameters generated by hbm2java
*/
@Entity
@Table(name = "sysparameters")
public class Sysparameters implements java.io.Serializable {
@Id
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "value")
private String value;
public Sysparameters() {
}
public Sysparameters(String name, String value) {
this.name = name;
this.value = value;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return this.value;
}
public void setValue(String value) {
this.value = value;
}
}
Моя конфигурация тестового файла:
package com.mcfly.songme.pojo.test;
@ContextConfiguration("classpath:/files-servlet.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class SysparameterPOJOTest
{
Я действительно не могу понять, что я делаю неправильно. Thx за помощь, если у вас есть идея.
Тем не менее, имеющий сеансового завод нулевого
oct. 09, 2013 11:38:06 AM org.springframework.orm.hibernate4.HibernateTransactionManager afterPropertiesSet
INFO: Using DataSource [[email protected]] of Hibernate SessionFactory for HibernateTransactionManager
java.lang.NullPointerException
at com.mcfly.songme.pojo.test.SysparameterPOJOTest.testFindAll_(SysparameterPOJOTest.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
с этим кодом, как вы сказали, я судимым получить сеанс из объекта
@Test
public void testFindAll_()
{
Session session = null;
try {
Sysparameters sys = null;
SysparametersDAO sysDAO = new SysparametersDAO();
session = sysDAO.getSessionFactory().getCurrentSession();
// sys = new SysparametersHome().findById(1);
} catch (Throwable ex) {
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
} finally {
Assert.assertNotNull(session);
}
}
Так что моя сессия завод, кажется, все еще null:/
У меня это исключение: Вызванный: org.springframework.beans.factory.BeanCreationException: Ошибка при создании боб с именем 'sysparametersDAO' определены в файле [C: \ Workspace \ WebTest \ songMe \ построить \ классы \ com \ mcfly \ songme \ pojo \ SysparametersDAO.class]: Не удалось выполнить создание бина; Вложенное исключение - org.springframework.beans.BeanInstantiationException: Не удалось создать экземпляр класса bean [com.mcfly.songme.pojo.SysparametersDAO]: конструктор сделал исключение; inested exception is java.lang.NullPointerException – McflyDroid
Вы можете изменить свой вопрос, чтобы добавить дополнительную информацию. Не помещайте это в комментарии. Кроме того, 'files-servlet.xml' тот же файл, что и ваш файл configuration.xml, который вы разместили выше? –