我正在编辑这篇文章:我试图从另一个类 DbDriverManager 中“databaseUrl”,但它给了我错误,如果您看到我的代码,其中创 build 置工厂 block 是 static { } 我认为这会产生问题。你能建议我更好的方法吗
iam 遇到此错误:无法初始化类 com.xxx.YY.hn.util.HibernateUtil
SessionFactory初始创建错误.java.lang.NullPointerException 这是我的代码:
public class DbDriverManager {
public String databaseUrl;
public String getDatabaseUrl() {
return databaseUrl;
}
public void setDatabaseUrl() {
FacesContext context = javax.faces.context.FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
this.databaseUrl = (String)request.getSession().getAttribute("databaseUrl");
}
}
public class HibernateUtil
{
private static final SessionFactory sessionFactory;
static
{ //create sessionFactory only once
try
{
Configuration cfg = null;
DbDriverManager dm = new DbDriverManager();
dm.setDatabaseUrl();
// creating the SessionFactory from hibernate.cfg.xml
cfg = new AnnotationConfiguration().configure();
System.out.println("dm.getDatabaseUrl() :" + dm.getDatabaseUrl());
cfg.setProperty("hibernate.connection.driver_class", "net.sourceforge.jtds.jdbc.Driver");
cfg.setProperty("hibernate.connection.url", dm.getDatabaseUrl());
cfg.setProperty("hibernate.connection.username", "wf_dbo");
cfg.setProperty("hibernate.connection.password", "webflex");
cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
//sessionFactory = new cfg.buildSessionFactory();
//sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}
catch (Throwable ex)
{
System.out.println("SessionFactory initial creation error."+ ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
最佳答案
您的代码需要稍作修改,如下所示
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public static SessionFactory getSessionFactory(String ip) {
SessionFactory sf = null;
Configuration configuration = new Configuration();
configuration.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
configuration.setProperty("hibernate.connection.url", "jdbc:mysql://" + ip + ":3306/dbName");
configuration.setProperty("hibernate.connection.username", "username");
configuration.setProperty("hibernate.connection.password", "password");
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties());
sf = configuration.buildSessionFactory(builder.build());
return sf;
}
不要调用空参数的configure()。我希望它在默认类路径中查找 hibernate.cfg.xml。
此外,AnnotationConfiguration() 已被弃用。请使用hibernate 4.3或以上版本。 以上代码适用于 hibernate 4.3.6
关于hibernate - 动态分配hibernate连接url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17688000/