Проблема с настройкой поставщика байт-кода в спящем приложении - PullRequest
4 голосов
/ 12 февраля 2011

Я пытаюсь добавить cglib в качестве поставщика байт-кода по умолчанию.Я использую hibernate.cfg.xml файл для настройки фабрики сессий.

<property name="hibernate.bytecode.provider">cglib</property>

Выше строка кода в моем файле конфигурации не вносит никаких изменений в поведение.Он по-прежнему устанавливает javassist в качестве поставщика байт-кода.

Оказывается, что 'javaassist' установлен в качестве поставщика по умолчанию.Эта конфигурация обновляется в файле формы среды hibernate.properties.Я не нашел никакой ссылки на метод создателя поставщика байт-кода нигде, кроме статического инициализатора класса Environment.

Есть ли какой-либо определенный способ назначить генератор байт-кода по умолчанию из файлов конфигурации xml.

Ответы [ 2 ]

5 голосов
/ 12 февраля 2011

Environment javadoc говорит:

Hibernate имеет две области свойств:

  • Свойства уровня фабрики могут быть переданы в SessionFactory, когдаэто экземпляр.Каждый экземпляр может иметь разные значения свойств.Если свойства не указаны, фабрика вызывает Environment.getProperties ().
  • Свойства системного уровня являются общими для всех экземпляров фабрики и всегда определяются свойствами среды.

Только системные свойства уровня

  • hibernate.jdbc.use_streams_for_binary
  • hibernate.cglib.use_reflection_optimizer

Свойства среды заполняются путем вызова System.getProperties (), а затем из ресурса с именем /hibernate.properties, если он существует.Системные свойства переопределяют свойства, указанные в hibernate.properties.

Однако это не совсем так.После просмотра исходного кода становится ясно, что hibernate.bytecode.provider также является свойством системного уровня, поэтому его нельзя указывать в hibernate.cfg.xml, только в hibernate.properties.

2 голосов
/ 30 августа 2014

'hibernate.bytecode.provider' нельзя настроить:

private static BytecodeProvider buildBytecodeProvider(String providerName) {
    if ( "javassist".equals( providerName ) ) {
        return new org.hibernate.bytecode.internal.javassist.BytecodeProviderImpl();
    }

    LOG.unknownBytecodeProvider( providerName );
    return new org.hibernate.bytecode.internal.javassist.BytecodeProviderImpl();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...