2017-07-19 168 views
0

休眠获取的NullPointerException配置用java @Bean注释在会话工厂

@Configuration 
@ComponentScan(basePackages = {"com.worldofshopping.BackendShop"}) 
@ComponentScan(basePackages = {"com.worldofshopping"}) 
@EnableTransactionManagement 
public class HibernateConfig { 
    BasicDataSource dataSource; 
    // Change the below final variable value based on database you choose 

    private final static String DATABASE_URL = "jdbc:h2:~/rahul"; 
    private final static String DATABASE_DRIVER = "org.h2.Driver"; 
    private final static String DATABASE_DIALECTS = "org.hibernate.dialect.H2Dialect"; 
    private final static String DATABASE_USERNAME = "sa"; 
    private final static String DATABASE_PASSWORD = "sa"; 

    // Database will be available 
    @Bean("dataSource") 
    public DataSource getSource() { 
     dataSource = new BasicDataSource(); 
     // Providing database connection Information 
     dataSource.setDriverClassName(DATABASE_DRIVER); 
     dataSource.setUrl(DATABASE_URL); 
     dataSource.setUsername(DATABASE_USERNAME); 
     dataSource.setPassword(DATABASE_PASSWORD); 

     return dataSource; 
    } 

    // Database will be available 
    @Autowired 
    @Bean 
    public SessionFactory getSessionFactory(DataSource datasource) { 
     LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource); 
     builder.addProperties(getHibernateProperties()); 
     builder.scanPackages("com.worldofshopping.BackendShopndShop.dto"); 
     return builder.buildSessionFactory(); 
    } 

    // For Hibernate property return 
    private Properties getHibernateProperties() { 
     Properties properties = new Properties(); 
     properties.put("hibernate.dialect", DATABASE_DIALECTS); 
     properties.put("hibernate.show_sql", "true"); 
     properties.put("hibernate.format_sql", "true"); 
     properties.put("hibernate.hbm2ddl.auto", "update"); 

     return properties; 
    } 

    // HibernateTransactionManager 
    @Autowired 
    @Bean 
    public HibernateTransactionManager getTransactionManagement(SessionFactory sessionFactory) { 
     HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory); 
     return transactionManager; 
    } 
} 


@Repository("userDao") 
@Transactional 
public class Userdaoimpl implements Userdao { 

    @Autowired(required = true) 
    private SessionFactory sessionFactory; 

    @Override 
    public User getUserByUsername(String email) { 
     String command = "from User where email=:parameter"; 
     Query<User> query = sessionFactory.getCurrentSession().createQuery(command, User.class); 
     query.setParameter("parameter", email); 
     try { 
      return query.getSingleResult(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      return null; 
     } 
    } 

    @Override 
    public boolean add(User user) { 
     try { 
      Cart cart = new Cart(); 
      cart.setUser(user); 
      user.setCart(cart); 
      sessionFactory.getCurrentSession().save(user); 
      return true; 
     } catch (Exception msg) { 
      msg.printStackTrace(); 
      System.out.println(msg); 
      return false; 
     } 
    } 

    @Override 
    public boolean update(User user) { 
     try { 
      sessionFactory.getCurrentSession().update(user); 
      return true; 
     } catch (Exception msg) { 
      msg.printStackTrace(); 
      System.out.println("Something error occured during Update " + msg); 
      return false; 
     } 
    } 

    @Override 
    public boolean delete(String email) { 
     User user = getUserByUsername(email); 
     user.setEnabled(false); 
     try { 
      sessionFactory.getCurrentSession().update(user); 
      return true; 
     } catch (Exception msg) { 
      msg.printStackTrace(); 
      System.out.println("Something error occured during delete"); 
      return false; 
     } 
    } 

    @Override 
    public User getUserById(Long user_id) { 

     try { 
      return sessionFactory.getCurrentSession().get(User.class, Long.valueOf(user_id)); 

     } catch (Exception msg) { 
      msg.printStackTrace(); 
      System.out.println("Something error occured during Update"); 
      return null; 
     } 
    } 

} 

主要方法:

public class App { 

    public static void main(String[] args) { 
     User user = new User(); 
     user.setAddress("New Delhi"); 
     user.setContact("9988776655"); 
     user.setEmail("[email protected]"); 
     user.setEnabled(true); 
     user.setName("Komal"); 
     user.setPassword("komal"); 
     user.setRole("CUSTOMER"); 
     Userdao userdao = new Userdaoimpl(); 
     userdao.add(user); 
    } 
} 

异常堆栈跟踪:

显示java.lang.NullPointerException 的java。 lang.NullPointerExcepti上(App.java:25) 在com.worldofshopping.BackendShop.daoimpl.Userdaoimpl.add(Userdaoimpl.java:37) 在com.worldofshopping.BackendShop.App.main

任何人,请帮助我米已开始交易使用@Repository("userDao") @Transactional

我也尝试在junit上运行,但仍然得到相同的错误!

回答

1

仅在您的主要方法中才构造UserUserdaoimpl!请问自己,SessionFactory和其他@Bean将如何启动?

尝试运行应用程序通过春天上下文或作为春天启动应用程序。然后获取userdao Bean来调用add方法。

0

你应该注册您的背景一样,如果你想尝试在JUnit测试您的应用程序:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, 
     classes = { HibernateConfig.class}) 
public class TestCaseApp { 

    @Autowired 
    @Qualifier("userDao") 
    Userdao userdao; 

    @Test 
    public void testSessionFactory(){ 
     User user = new User(); 
     user.setAddress("New Delhi"); 
     user.setContact("9988776655"); 
     user.setEmail("[email protected]"); 
     user.setEnabled(true); 
     user.setName("Komal"); 
     user.setPassword("komal"); 
     user.setRole("CUSTOMER"); 
     userdao.add(user); 
    } 
} 

不能使用 “new” 关键字(userDAO的UserDAO的=新UserDAOImpl中())在一个Spring对象上。 您可以使用spring-boot注册Spring上下文,或者如果您有Web应用程序,则可以通过web.xml注册。

如果您想在主要方法中使用您的dao。

ApplicationContext ctx = new AnnotationConfigApplicationContext(HibernateConfig.class); 
Userdao userdao = ctx.getBean("userDao",Userdao.class);