在hibernate应用程序中设置字节码提供程序的问题

Vij*_*bey 4 hibernate

我试图添加cglib作为默认字节码提供程序.我正在使用hibernate.cfg.xml文件来配置会话工厂.

<property name="hibernate.bytecode.provider">cglib</property>
Run Code Online (Sandbox Code Playgroud)

我的配置文件中的上面一行代码不会对行为进行任何更改.它仍设置javassist为字节代码提供程序.

原来是'javaassist'被设置为默认提供者.此配置在环境表单hibernate.properties文件中更新.除了Environment类的静态初始化程序之外,我没有找到任何对字节代码提供程序创建者方法的引用.

是否有任何明确的方法从xml配置文件中分配默认字节代码生成器.

axt*_*avt 5

Environmentjavadoc说:

Hibernate有两个属性范围:

  • 工厂级属性可以在实例化时传递给SessionFactory.每个实例可能具有不同的属性值.如果未指定任何属性,则工厂将调用Environment.getProperties().
  • 系统级属性由所有工厂实例共享,并始终由Environment属性确定.

唯一的系统级属性是

  • 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.