【问题标题】:How can I use constants in Hibernate native query?如何在 Hibernate 本机查询中使用常量?
【发布时间】:2016-02-06 21:29:08
【问题描述】:

我正在尝试使用 @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);
}

【问题讨论】:

  • 你能添加一些关于创建查询对象的代码吗?
  • @Jamie - 我在问题中添加了代码,虽然它主要是一个魔法咒语......不幸的是,由于查询是 native=true,我不能以 select new map (... 开头我会在 JPQL 做。但是,该错误并不像 SQL 解析问题那样表明类型/签名问题。

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


【解决方案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 = ?

【讨论】:

    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2018-07-13
    • 2020-06-29
    相关资源
    最近更新 更多