How to configure intellij idea to use hibernate pe

2019-07-26 14:37发布

问题:

Assume that i have this below hibernate.cfg.xml file that contains data source configuration and path to jar files that contains .hbm.xml mappings:

<?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>

How should i configure intellij idea to use hibernate console and write hql queries? Each jar file only contains .hbm.xml files

UPDATE

I can not put each mapping like <mapping resource="org/rgh/hibernate/Category.hbm.xml"/>, because i have over 1,500 .hbm.xml file.

UPDATE

I recently migrated from Eclipse to Intellij Idea, in Eclipse hql editor tools works properly with this hibernate.cfg.xml file, but Intellij Idea doesn't work.

回答1:

You can use setMappingJarLocations method of LocalSessionFactoryBean to load the classes for the jar location. Here is the example:

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;
    }

and DatabaseData class contains the db url, username and password etc:

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;
}