[Bug] hibernate save操作回放失败
Search before asking
- [X] I have searched the existing issues before asking.
AREX Test Service
AREX Java Agent (arextest/arex-agent-java)
Current Behavior
现象描述: 使用arex对以下hibernate代码进行录制: MarkLogDO markLogDO = markLogRepo.findByRemark(remark); markLogDO.setLogFilePath(filePath); return markLogRepo.save(markLogDO);
录制结果正常(一条query、一条update),当对该条数据进行回放时出现空指针异常 java. lang. NullPointerException: null at org.hibernate. loader.entity.AbstractEntityLoader. load(AbstractEntityLoader. java: 86) at org.hibernate. loader.entity.AbstractEntityLoader. load(AbstractEntityLoader. java:63) at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4415) at org.hibernate.persister.entity.AbstractEntityPersister. load(AbstractEntityPersister. java:4405)
排查过程: 根据hibernate源码显示,在执行save操作时,org.hibernate.event.internal.DefaultMergeEventListener.onMerge()方法会对游离态实体执行select xxx by id做一次状态合并,而录制时实体的状态是持久态,不需要查一次id就没录,因为没有录制 所以回放失败 但是select xxx by id的行为并不是我们自己执行的 而是hibernate内部行为
Expected Behavior
期望hibernate使用方可以不关心接口内部实现做到回放正常
Steps To Reproduce
1
Anything else
No response
Are you willing to submit a pull request to fix on your own?
- [ ] Yes I am willing to submit a pull request on my own!
感谢反馈,我们后续跟进下这个issue,也烦请确认下录制场景为什么是持久态,而回放期间变成了游离态?