hibernate - 动态分配hibernate连接url

标签 hibernate url connection dynamically-generated

我正在编辑这篇文章:我试图从另一个类 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/

相关文章:

java - 让 Hibernate 和 SQL Server 更好地处理 VARCHAR 和 NVARCHAR

java - Hibernate 在读取之前永久清除所有现有数据

url - 如何用服务器端语言获取哈希值?

tcp - 设置自定义端口tcp,仅用于登录cms

hibernate - 使用带有 return-join 的 Hibernate native 查询重复行

spring - 翻译约束检查 spring jpa 中的任一列不为空

php - 在 PHP 中将复杂的 URL 作为参数传递

ios - 向后播放视频

使用并行计算时 R 卡住,警告 'closing unused connection'

C#连接变为空