Hibernate错误:无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

时间:2018-08-01 06:09:09

标签: java hibernate

在这里,我创建会话:

public class HibernateSessionFactoryUtil {

    private static SessionFactory sessionFactory;

    public HibernateSessionFactoryUtil() { }

    public static SessionFactory getSessionFactory() {
        if (sessionFactory == null) {
            try {
                Configuration configuration = new Configuration().configure();
                configuration.addAnnotatedClass(User.class);

                StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
                sessionFactory = configuration.buildSessionFactory(builder.build());
            } catch (Exception e) {
                System.out.println("Error!" + e);
            }
        }

        return sessionFactory;
    }
}

MyUser:

@Entity
@Table(appliesTo = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String lastName;
    private String firstName;
    private String position;
    private int department;

    public User(){}

    public User(String lastName, String firstName, String position, int department) {
        this.lastName = lastName;
        this.firstName = firstName;`
        this.position = position;
        this.department = department;
    }

}

DAOImpl的初始化会话的那一行中,出现错误:

public void save(final Object o) {
    if (o == null) {
        logger.error("**DAO - save* EMPTY OBJ");
        return;
    }

    Session session = HibernateSessionFactoryUtil.getSessionFactory().openSession();
    Transaction tx1 = session.beginTransaction();
    session.save(o);
    tx1.commit();
    session.close();
}

例外:

Exception in thread "main" java.lang.NullPointerException
    at codebox.dao.DAOImpl.save(DAOImpl.java:50)
    at codebox.services.UserService.saveUser(UserService.java:19)
    at codebox.Application.main(Application.java:16)

2 个答案:

答案 0 :(得分:1)

您遇到的问题很可能是由于未配置配置对象引起的。请添加hibernate.connection.username,hibernate.connection.password,hibernate.dialect,hibernate.hbm2ddl.auto,然后重试。如果未设置这些属性,则每次会话都将为空。您还可以使用hibernate.cfg.xml文件检查该操作。

例如:

Preferences | Go | GOPATH | Project GOPATH

祝你好运!

答案 1 :(得分:1)

错误是我没有初始化上下文: 以main为例:

ConfigurableApplicationContext context = SpringApplication.run (Application.class, args);
MyService myService = (MyService) context.getBean ("myService");

在此服务中,主豆被拔起