У меня есть абстрактный класс 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
) сникаких атрибутов на него.Это надумано, но суть в том, что у меня нет атрибута, который бы однозначно определял тип объекта - и я бы не стал, если бы не этот случай.
( Примечание : классы не пустые, они поведенческие , поэтому рефакторинг их из существования невозможен.)
Как сохранить его обратно в базу данных?
В идеале было бы Discriminator
для ParameterMap
с, но, похоже, его нет.
Насколько я могу судить, существует ряд нежелательных решений, среди которых:
- Откажитесь и добавьте метод "getType ()" во все мои подклассы, который возвращает статическийстрока.В этом случае
AL
.(Обратите внимание, что я изо всех сил старался избежать этого во всем моем коде, поэтому имел это = OOD-поражение). - Создайте объект «БД», который точно такой же, как мой большой, сложный объект, но, возможно, также имеетдополнительная строка «О, кстати, мой ТИП - АЛ».
- Извлеките все 20 атрибутов, которые я хочу сохранить в HashMap перед вставкой объекта.
- Некоторые другие сумасшествия, такие как использование toString () или что-то еще, чтобы выручить меня.
Скорее всего, я пойду с первым вариантом, но это кажется довольно нелепым, не так ли?Если iBatis может создать его, разве он не сможет его сохранить?Что мне действительно нужно, это дискриминатор для вставки.
Мне не повезло, или я просто упускаю из виду что-то очевидное?