插入时的 iBatis 鉴别器
我有一个抽象类和具体的子类来配合它。我使用鉴别器将数据从数据库中提取出来,如下所示:Example
<resultMap id="ExampleResultMap" class="Example">
<discriminator column="stateCode" javaType="java.lang.String">
<subMap value="AL" resultMap="AlabamaStateResultMap"/>
<subMap value="AR" resultMap="ArkansasStateResultMap"/>
[...]
</discriminator>
</resultMap>
<resultMap extends="ExampleResultMap"
id="AlabamaStateResultMap"
class="AlabamaState"/>
<resultMap extends="ExampleResultMap"
id="ArkansasStateResultMap"
class="ArkansasState"/>
[...]
因此,我有一个对象(抽象对象的子类),在他身上没有任何属性。这是人为的,但要点是,我没有任何属性来唯一标识对象的类型 - 如果不是这种情况,我没有理由这样做。AlabamaState
Example
(注意:这些类不是空的,它们是行为的,因此不能选择重构它们。
如何将其保存回数据库?
理想情况下,会有一个 for s,但似乎没有一个。Discriminator
ParameterMap
据我所知,有许多不良的解决方案,其中包括:
- 放弃并在我的所有子类上添加一个返回静态字符串的“getType()”方法。在本例中,.(请注意,我非常努力地避免在我的所有代码中都需要它,所以有这个=OOD-defeat)。
AL
- 制作一个“DB”对象,它就像我的大而复杂的对象一样,但碰巧还有一个额外的字符串,上面写着“哦,顺便说一句,我的TYPE是AL”。
- 在插入对象之前,将我想要保留的所有20个属性提取到HashMap中。
- 其他一些疯狂的事情,比如使用toString()或其他东西来帮助我。
我可能会选择第一个选项,但这似乎很荒谬,不是吗?如果iBatis可以创建它,它不应该能够坚持下去吗?我真正需要的是插入的鉴别器。
是我运气不好,还是我只是忽略了一些明显的东西?