【发布时间】:2014-08-14 23:21:22
【问题描述】:
考虑以下场景 -
有两个表(架构相同)称为ActiveIssue 和ResolvedIssue。当问题处于活动状态时,它位于 ActiveIssue 表中,当问题得到解决时,它被移动到 ResolvedIssue 表中。问题可以相互关联。
我有一个方法可以执行以下操作 -
- 从 ActiveIssue 获取问题的相关问题
- 从 ResolvedIssue 获取问题的相关问题
在调用这个方法之前,我设置了session.setFlushMode(FlushMode.MANUAL)来避免下面的情况——
- 从 ActiveIssue 获取相关问题
- 在后台,问题 X 得到解决并从 ActiveIssue 移动到 ResolvedIssue
- 从 ResolvedIssue 获取相关问题(由于问题 X 导致冲突)
但是,我观察到即使使用此逻辑,我也会遇到 WrongClassException。例如,我得到 p>
org.hibernate.WrongClassException: Object with id: 123456 was not of the
specified subclass ... ActiveIssue
(loaded object was of wrong class ... ResolvedIssue)
我正在使用org.springframework.orm.hibernate3.support.HibernateDaoSupport 并在此对象上调用Session session = getSession()。 ActiveIssue 和 ResolvedIssue 都派生自一个名为 Issue 的基类。我在基类上使用InheritanceType.TABLE_PER_CLASS继承策略,所以ActiveIssue映射到ActiveIssue表,ResolvedIssue映射到ResolvedIssue表。
当我将 FlushMode 显式设置为 MANUAL 时,我不明白为什么会出现 WrongClassException。 会话中的对象不应该是一致的吗?
【问题讨论】:
-
请全栈跟踪!!
标签: spring hibernate exception jpa orm