异常:JDBC类型-9没有方言映射



这是我的Dao函数

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列表时感到困惑。有人能帮我解决这个问题吗。

这意味着NVARCHAR列没有映射。

但是你可以在你的查询中添加演员阵容

SELECT cast(the_nvarchar_column_name as varchar) ...

参见此处

或者有人建议添加此处描述的映射

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

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

逐字符串串联创建SQL查询字符串是一种糟糕的做法。您应该使用参数。

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

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

您也可以使用条件查询。

最新更新