Дискриминатор 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 ) без каких-либо атрибутов на нем. Это надумано, но суть в том, что у меня нет атрибута, однозначно определяющего тип объекта - и нет никаких причин, по которым я бы стал, если бы не этот случай.

( Примечание : классы не пусты, они поведенческие , поэтому их рефакторинг не существует) не вариант.)

Как мне сохранить его обратно в базу данных?

В идеале должен быть Дискриминатор для ParameterMap s, но, похоже, его нет.

Насколько я могу судить , есть ряд нежелательных решений, среди них:

  • Отказаться и добавить во все мои подклассы метод getType (), который возвращает статическую строку. В данном случае AL . (Обратите внимание, что я изо всех сил старался избежать необходимости в этом во всем моем коде, поэтому имел this = ООД-поражение.)
  • Создайте объект «БД», который точно такой же, как мой большой, сложный объект, но также имеет дополнительную строку говоря: «О, кстати, мой ТИП - AL».
  • Извлеките все 20 атрибутов, которые я хочу сохранить в HashMap, прежде чем вставлять объект.
  • Другое безумие, например использование toString () или что-то еще, чтобы мне помочь.

Скорее всего, я выберу первый вариант , но это кажется довольно нелепым, не правда ли? Если iBatis может его создать, разве он не сможет его сохранить? Что мне действительно нужно, так это дискриминатор для вставки.

Мне не повезло, или я просто упускаю из виду что-то очевидное?

13
задан inanutshellus 5 December 2012 в 15:59
поделиться