问题描述
我得到了用于字节码增强工作的Hibernate Gradle插件,它增强了所有实体类的基类,但是在运行时,脏跟踪不起作用。
我们使用Hibernate XML作为生成步骤的基础(所有实体类都派生自生成的实体类),因此将@Entity
添加到基类很容易,并且选择了hibernate-gradle-plugin所有实体(基)类。
不幸的是,字节码增强器直接从字节码中获取字段名称,而不是属性名称。
示例:XML映射的实体类Validation
具有基类ValidationBase
,该基类具有字段boolean mActive
,boolean isActive()
吸气剂和void setActive(boolean pActive)
设置器在Validation.hbm.xml
文件中映射为
<property name="active" type="yes_no"> <column name="ACTIVE" length="1" not-null="true"> <comment>flag if the validation is active.</comment> </column> </property>
它似乎表明org.hibernate.bytecode.enhance.spi.Enhancer
实现在类上使用@Entity
表示法来检测实体(作品),然后使用字段名称作为属性名称。
这是行不通的,因为增强类的属性名称现在为mActive
,但是在entitymetamodel中,相同的属性称为active
。
在生成的类中有将近400个entent,> 1MLOC和许多逻辑,很明显,我不能在合理的时间范围内从XML切换到带注释的类。
我需要的功能是在线脏跟踪:由于会话和刷新模式中的对象数量很多,许多用例在SessionImpl.autoFlushIfrequired()
中花费了整个运行时间的50%-90% AUTO
。
在某些用例中,我们进行了重新编写,将很大一部分代码移至刷新模式只读部分,但是由于各种原因,某些代码无法在可预见的时间内安全地远离刷新模式为“自动”,会话大小会尽可能的小(在“慢”情况下通常> 50000)。
所以我的问题是:
- hibernate-gradle-plugin是否有技巧将字段名
mAttribute
转换为attribute
? - 由于所有基类都生成了,我应该尝试在代码生成器中运行
SelfDirtinessTracker
/ExtendedSelfDirtinessTracker
代码生成,而不是使用字节码增强功能吗? - 我应该放弃所有希望吗? ;-)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)