Hibernate Gradle插件,用于字节码增强和基于XML的映射
我得到了用于字节码增强的Hibernate Gradle插件,它增强了所有实体类的基类,但在运行时脏跟踪不起作用 我们使用HibernateXML作为生成步骤的基础(所有实体类都派生自生成的实体类),因此将Hibernate Gradle插件,用于字节码增强和基于XML的映射,hibernate,gradle,hibernate-mapping,byte-code-enhancement,Hibernate,Gradle,Hibernate Mapping,Byte Code Enhancement,我得到了用于字节码增强的Hibernate Gradle插件,它增强了所有实体类的基类,但在运行时脏跟踪不起作用 我们使用HibernateXML作为生成步骤的基础(所有实体类都派生自生成的实体类),因此将@entity添加到基类很容易,HibernateGradle插件会选择所有实体(基础)类。 不幸的是,字节码增强器直接从字节码中获取字段名,而不是属性名 示例:XML映射的实体类Validation有一个基类ValidationBase,它有一个字段boolean mActive,一个boo
@entity
添加到基类很容易,HibernateGradle插件会选择所有实体(基础)类。
不幸的是,字节码增强器直接从字节码中获取字段名,而不是属性名
示例:XML映射的实体类Validation
有一个基类ValidationBase
,它有一个字段boolean mActive
,一个boolean isActive()
getter和一个void setActive(boolean pActive)
setter,该setter在Validation.hbm.XML
文件中作为mappend
标记验证是否处于活动状态。
它指出,org.hibernate.bytecode.Enhancer.spi.Enhancer
实现使用类上的@Entity
符号来检测实体(works),然后使用字段名作为属性名。
这不起作用,因为增强类的属性名称现在是mActive
,但在entityMetamodel中,相同的属性称为active
由于生成的类中有近400个Entite、>1MLOC和大量逻辑,很明显,我不能在合理的时间范围内从XML转换到带注释的类
我需要的功能是在线脏跟踪:由于会话和刷新模式中有大量对象,许多用例在SessionImpl.autoflushiftrequired()
中花费了整个运行时间的50%-90%
在某些用例中,我们进行了重写,将大量代码移动到刷新模式只读部分,但由于各种原因,某些代码无法在远离刷新模式自动的可预测时间范围内安全地更改,并且会话大小尽可能小(在“慢”情况下通常大于50000)
因此,我的问题是:
- hibernate gradle插件是否有技巧将字段名
转换为MattAttribute
属性
- 由于所有基类都是生成的,我是否应该尝试让代码生成器中的
/selfdirtinestracker
代码生成工作,而不是使用字节码增强功能扩展selfdirtinestracker
- 我应该放弃所有的希望吗?;-)李>
<property name="active" type="yes_no">
<column name="ACTIVE" length="1" not-null="true">
<comment>flag if the validation is active.</comment>
</column>
</property>