这是我的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
您也可以使用条件查询。