【问题标题】:Exception: No Dialect mapping for JDBC type: -9 [duplicate]例外:没有 JDBC 类型的方言映射:-9 [重复]
【发布时间】:2016-04-02 23:55:00
【问题描述】:

这是我的道功能

public List<MerchantTransaction> merchantList(String strMerchantId, String strStatus){
        List<MerchantTransaction> merTra = null;
        Session session = null;

        try {
             session  = sessionFactory.getCurrentSession();
             merTra = (List<MerchantTransaction>) session.createSQLQuery("SELECT * FROM MERCHANT_TRANSACTION WHERE TRANSACTIONMERCHANTID='"+strMerchantId+"' AND TRANSACTIONSTATUS='"+strStatus+"'").list();

            } catch (Exception e) {
                    System.out.println("Exception in Merchant traans dao list :"+e.getMessage());
            }

    return merTra;
    }
}

错误代码 - JDBC 类型没有方言映射:-9

在这里,我尝试使用 createSQLQuery 语句从数据库中获取列表。我对使用 createSQLQuery 获取 MerchantTransaction 列表感到困惑。谁能帮我解决这个问题。

【问题讨论】:

  • 而不是 System.out.println("Merchant traans dao list 中的异常:"+e.getMessage());做这个 System.out.println(e);这将提供更多有用的输出/堆栈跟踪。

标签: java hibernate spring-mvc


【解决方案1】:

除了@StanislavL 的回答之外,您的代码中还有一个错误。您无法使用本机 SQL 获得 List&lt;MerchantTransaction&gt;。 您的查询应该是

   List<Object[]> merTra = (List<Object[]>) session.createSQLQuery(
            "SELECT * FROM MERCHANT_TRANSACTION WHERE TRANSACTIONMERCHANTID='" + strMerchantId
                    + "' AND TRANSACTIONSTATUS='" + strStatus + "'").list();

通过字符串连接创建 SQL 查询字符串是一种不好的做法。你应该使用Parameters

但最好的方法是使用 HQL。您的查询非常简单,因此在 HQL 中可能是这样的(假设 MerchantTransaction 与 Merchant 有关联)

from MerchantTransaction t where t.merchant.id = :merchantId 
    and t.transactionStatus = :status

您也可以使用条件查询。

【讨论】:

    【解决方案2】:

    表示没有 NVARCHAR 列的映射。

    但您可以在查询中添加演员表

    SELECT cast(the_nvarchar_column_name as varchar) ...
    

    here

    或者有建议添加here所描述的映射

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 2014-08-08
      • 2015-01-18
      • 2017-12-16
      • 1970-01-01
      • 2013-12-07
      • 2015-03-27
      相关资源
      最近更新 更多