【问题标题】:How to configure intellij idea to use hibernate persistence tools and reading mapping files from external jar files如何配置intellij idea使用hibernate持久化工具和从外部jar文件读取映射文件
【发布时间】:2018-05-25 03:46:48
【问题描述】:

假设我在hibernate.cfg.xml 文件下面有这个包含数据源配置和包含.hbm.xml 映射的jar 文件的路径:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.251.134:1521:DB</property>
        <property name="hibernate.connection.username">rgh</property>
        <property name="hibernate.connection.password">rgh</property>
        <property name="hibernate.connection.pool_size">10</property>
        <property name="show_sql">true</property>
        <property name="hibernate.connection.internal_logon">normal</property>
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="hibernate.hbm2ddl.auto">none</property>
        <property name="hibernate.default_schema">rgh</property>
        <property name="hibernate.connection.datasource">jndi</property>
        <!-- Mapping files -->

        <mapping jar="C:\Users\Ghafari\.m2\repository\org\rgh\goodsCirculation\1.0-releases\goods-1.0-releases.jar"></mapping>
        <mapping jar="C:\Users\Ghafari\.m2\repository\org\rgh\core\1.0-releases\core-1.0-releases.jar"></mapping>
        <mapping jar="C:\Users\Ghafari\.m2\repository\org\rgh\framework\2.1.1-releases\framework-2.1.1-releases.jar"></mapping>
    </session-factory>
</hibernate-configuration>

我应该如何配置 intellij idea 以使用休眠控制台并编写 hql 查询? 每个jar文件只包含.hbm.xml文件

更新

我不能把每个映射都像&lt;mapping resource="org/rgh/hibernate/Category.hbm.xml"/&gt; 这样,因为我有超过 1,500 个.hbm.xml 文件。

更新

我最近从 Eclipse 迁移到 Intellij Idea,在 Eclipse hql 编辑器工具中可以正常使用这个 hibernate.cfg.xml 文件,但 Intellij Idea 不起作用。

【问题讨论】:

    标签: java hibernate intellij-idea hql


    【解决方案1】:

    您可以使用 LocalSessionFactoryBean 的 setMappingJarLocations 方法来加载 jar 位置的类。示例如下:

    public static SessionFactory buildSessionFactory(DatabaseData dbData) {
        SessionFactory sessionFactory = null;
        try {
    
            if (dbData != null) {
                // logger.info("dbData not null");
                // logger.info("dbData driver : "+dbData.getDataSourceDriver());
                // logger.info("dbData IP : "+dbData.getDatabaseIP());
                logger.info("dbData  DBNAme : " + dbData.getDatabaseSchema());
                // logger.info("dbData Uname "+dbData.getDatabaseUserName() +"
                // pwd :
                // "+dbData.getDatabaseUserName());
    
                DriverManagerDataSource dataSource = new DriverManagerDataSource();
                dataSource.setDriverClassName(dbData.getDataSourceDriver());
                dataSource.setUrl("jdbc:mysql://" + dbData.getDatabaseIP() + ":" + dbData.getDatabasePort() + "/" + dbData.getDatabaseSchema()
                        + "?autoReconnect=true&useSSL=false");
                dataSource.setUsername(dbData.getDatabaseUserName());
                dataSource.setPassword(dbData.getDatabasePassword());
    
                LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
                sessionFactoryBean.setDataSource(dataSource);
    
                Properties hibernateProperties = new Properties();
                // hibernateProperties.put("hibernate.dialect",
                // HIBERNATE_DIALECT);
                hibernateProperties.put("hibernate.show_sql", false);
                //hibernateProperties.put("hibernate.hbm2ddl.auto", "update");
                sessionFactoryBean.setHibernateProperties(hibernateProperties);
    
    // load the entity classes from a package
    //sessionFactoryBean.setPackagesToScan("com.**.**.entity");
    //load the entity classes from jar
    sessionFactoryBean.setMappingJarLocations("location for jar file");
                    sessionFactoryBean.afterPropertiesSet();
                    return sessionFactoryBean.getObject();
                }
            } catch (Exception ex) {
                logger.error("Initial SessionFactory creation failed.", ex);
                ex.printStackTrace();
                throw new ExceptionInInitializerError(ex);
            }
            return sessionFactory;
        }
    

    DatabaseData 类包含 db url、用户名和密码等:

    public class DatabaseData {
    
    private String databaseIP;
    private String databasePort;
    private String databaseName;
    private String databaseSchema;
    private String databaseUserName;
    private String databasePassword;
    private String dataSourceDriver;
    private int timeout;
    }
    

    【讨论】:

    • 我如何在 intelij idea 持久化工具中使用这个类?我想你误解了我的问题,请查看我的问题更新
    猜你喜欢
    • 2013-10-18
    • 2017-05-07
    • 2015-11-30
    • 2012-10-28
    • 2015-12-23
    • 2013-01-07
    • 1970-01-01
    • 2012-12-25
    • 2014-06-05
    相关资源
    最近更新 更多