如何在Hibernate本机查询中使用常量?

时间:2015-11-05 21:11:10

标签: java sql-server hibernate spring-data-jpa

我正在尝试使用@Query注释在Spring Data JPA存储库中对SQLServer进行简单查询以创建本机查询。 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的?如果没有,是否有任何方法来扼杀它窒息的东西?参数解析与回滚语句之间没有日志。

编辑: 这是存储库上下文中的查询

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);
}

1 个答案:

答案 0 :(得分:1)

我相信这个错误: 遇到了重复的sql别名[]

是由于select语句中有多列是非表列名称而引起的。为每个列赋予别名应该有效。换句话说,这样的事情应该有效:

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 = ?