2015-11-05 10 views
1

Я пытаюсь сделать простой запрос к SQLServer в репозитории JPA Spring Data, используя аннотацию @Query для создания собственного запроса. Hibernate овладевает этим и, похоже, не может разобрать константы (я думаю).Как я могу использовать константы в исходном запросе Hibernate?

Ошибка: org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [] during auto-discovery of a native-sql query

Этого запрос:

select convert(varchar,((a.achan - a.freq)/100)) 
     +'_'+ 
     convert(varchar,((a.bchan - a.freq)/100)) 
    , convert(varchar,((a.bchan - a.freq)/100)) 
from channel_src as a 
where a.discriminator = ? 

Поскольку каждое фактическое поле псевдонимов к фактической таблице, и жалоба о дубликате псевдоним NULL, я предполагаю, что ему не нравятся 100-е? Если нет, есть ли способ объяснить, что он задыхается? Между разрешением параметра и оператором отката нет строки журнала.

Edit: Вот запрос в контексте хранилища

public interface ChannelMatrixRepository extends JpaRepository<ChannelMatrix,Integer> 
{ 
    @Query(value = "select convert(varchar,((a.achan - a.freq)/100)) +'_'+ convert(varchar,((a.bchan - a.freq)/100)) , convert(varchar,((a.bchan - a.freq)/100)) from channel_src as a where a.discriminator = ?1", nativeQuery = true) 
    Map<String, String> findAllBySquelchLevel(int sk); 
} 
+0

Можете ли вы добавить код вокруг создания объекта запроса? – Jamie

+0

@Jamie - я добавил код к вопросу, хотя это в основном просто магическое заклинание ... К сожалению, поскольку запрос является «native = true», я не могу запустить его с помощью 'select new map (...' который я бы сделал в JPQL, но ошибка не указывает на проблему типа/подписи, а также проблему синтаксического анализа SQL. – user1944491

ответ

1

Я считаю, что эта ошибка: Встречающиеся дублированной псевдоним SQL []

вызвано тем, что у вас есть несколько столбцы в вашем заявлении выбора, которые не являются именами столбцов-столбцов. Предоставление каждому из этих столбцов псевдонима должно работать. Другими словами, что-то вроде этого должно работать:

select 
    convert(varchar,((a.achan - a.freq)/100)) +'_'+ 
     convert(varchar,((a.bchan - a.freq)/100)) COLUMN_ONE 
    , convert(varchar,((a.bchan - a.freq)/100)) COLUMN_TWO 
from channel_src as a 
where a.discriminator = ? 
+1

Теперь, когда вы указываете на это, это имеет смысл. – user1944491

Смежные вопросы