arex-agent-java icon indicating copy to clipboard operation
arex-agent-java copied to clipboard

[Bug] hibernate save操作回放失败

Open buzz321 opened this issue 1 year ago • 1 comments

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!

buzz321 avatar Nov 06 '24 03:11 buzz321

感谢反馈,我们后续跟进下这个issue,也烦请确认下录制场景为什么是持久态,而回放期间变成了游离态?

lucas-myx avatar Dec 10 '24 11:12 lucas-myx