Ваше сообщение об ошибке гласит следующее:
Нет доступного квалифицирующего компонента типа de.zipcode.view.mapper.ZipCodeMapper: ожидается как минимум 1 компонент, который считается кандидатом на автопровод. ] blockquote>
Таким образом, проблема здесь:
@Autowired @Qualifier("delegate") public void setDelegate(PersonMapper delegate) { this.delegate = delegate; }
Вы пытаетесь выполнить автоматическое подключение в PersonMapper, но не указали bean-компонент, который соответствует требованиям. Вам необходимо настроить
.@Bean
дляPersonMapper
, чтобы Spring мог внедрить его или аннотировать вашPersonMapper
(или класс, который его расширяет) с помощью@Component
(или любого расширяющего стереотипа)
Вы не можете оператор варианта использования в ИЗ пункта, но можно использовать следующее вместо этого:
SELECT itemnumber, itemtype, description
FROM tablea
WHERE itemnumber = @itemnumber AND itemtype = 'A'
UNION ALL
SELECT itemnumber, itemtype, description
FROM tableb
WHERE partnumber = @itemnumber AND itemtype <> 'A'
Вы могли попытаться создать динамический SQL-оператор как строку и затем назвать sp_executesql хранимую процедуру для выполнения строки.
Посмотрите здесь для получения дополнительной информации и примеры.
Я не уверен, почему Вы хотите сделать вещи в одном SQL-операторе.. Я не человек SQL Server, но в хранимой процедуре Oracle Вы могли записать что-то вроде этого
If itemtype = 'A'
Then
<statement for table A>
Else
<statement for Table B>
End if
Что-то вроде этого должно работать в SQL Server, также.. возможно, кто-то мог подробно остановиться на этом?
Вы действительно не объясняете где ItemType
прибывает из. Как предложено UNION
могло бы быть применимым, если Вы просто комбинируете две таблицы.
Вот другая возможность, которая может коснуться Вашей проблемы:
SELECT ItemNumber,
ItemType,
COALESCE(TableA.Description, TableB.Description) AS Description
FROM Items
LEFT JOIN TableA
ON Items.ItemType = 'A'
AND TableA.ItemNumber = Items.ItemNumber
LEFT JOIN TableB
ON Items.ItemType <> 'A'
AND TableB.ItemNumber = Items.ItemNumber
Вы лучше из использования Запроса на объединение, чтобы присоединиться к таблицам сначала и затем ВЫБРАТЬ.
Кроме того, можно рассмотреть создание представления для одной из таблиц, таким образом, это вытягивает только столбцы, Вы нуждаетесь при переименовании их, затем ОБЪЕДИНЕНИЕ, и затем выбираете из ОБЪЕДИНЕНИЯ.
Или используйте временную таблицу для хранения результата каждого запроса. Поместите создание временной таблицы в СЛУЧАЕ (псевдокод, не протестированный):
CASE @itemType
WHEN 'A'
SELECT ACol1 AS Col1, ACol2 AS Col2
FROM TABLE_A
INTO #tempTable
WHERE ItemNumber = @itemNumber
ELSE
SELECT BCol1 AS Col1, BCol2 AS Col2
FROM TABLE_B
INTO #tempTable
WHERE PartNumber = @itemNumber
END
SELECT * FROM #tempTable