Проблемы с использованием Eclipse Hibernate плагин - не удалось найти сессионный завод в JNDI

Я использую возможности обратного инжиниринга, встроенные в плагин eclipse hibernate, для создания файлов dao и hbm.xml для каждой таблицы.

Он делает это довольно хорошо, но когда я пытаюсь использовать сгенерированные объекты, я получаю сообщение Не удается найти SessionFactory в ошибке JNDI.

Я видел сообщение, в котором предлагалось, что это происходит, когда вы называете свой SessionFactory в файле hibernate.cfg.xml, поэтому я удалил тег имени и все еще получаю ту же ошибку.

Это мой hibernate.cfg.xml

    <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">qwerty</property>
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/agilegroup3</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.default_catalog">agilegroup3</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <mapping resource="generated/Usersroles.hbm.xml" />
        <mapping resource="generated/Role.hbm.xml" />
        <mapping resource="generated/Logdata.hbm.xml" />
        <mapping resource="generated/Logtrigger.hbm.xml" />
        <mapping resource="generated/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>

Это сгенерированный код, который вызывает исключение

protected SessionFactory getSessionFactory() {
    try {
        return (SessionFactory) new InitialContext()
                .lookup("SessionFactory");
    } catch (Exception e) {
        log.error("Could not locate SessionFactory in JNDI", e);
        throw new IllegalStateException(
                "Could not locate SessionFactory in JNDI");
    }
}

Я не знаю много о JNDI, но я предполагаю, что это своего рода эквивалент поиска файла конфигурации. Я не хочу использовать JNDI, но я не знаю, как этого добиться с помощью плагина eclipse.

Изменение сгенерированного кода на самом деле мне не поможет, потому что мне нужно будет в какой-то момент продолжать его регенерировать, чтобы кто-нибудь мог объяснить, почему и как это происходит, и что я могу с этим сделать, буду благодарен

Спасибо

Джонатан

2 ответа

Вы можете указать все соединение, пароль, имя пользователя и т. Д. Непосредственно в файле конфигурации Hibernate, а затем загрузить их с помощью следующего кода:

Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sf = cfg.buildSessionFactory();

Или вы можете получить его из JNDI. Это позволяет вашему системному администратору изменять соединение, пароль, имя пользователя и т. Д. После развертывания, регистрируя другой SessionFactory в JNDI.

Вам необходимо проконсультироваться с документацией вашего сервера приложений о том, как указать ресурсы JNDI с сервером приложений.

Внутри метода buildsessionfactory инициализируйте initialcontext.pass имя jessioni фабрики сеанса в методе фабрики сеанса get (т.е. в поиске)

Другие вопросы по тегам