我的查询收到此错误消息..我正在使用openjpa和sql server作为我的数据库......
这是我的疑问:
public static List<ProcesosGeneralEntity> getALLbyProductor(String productor){
Query q = entityManager.createQuery("select a from ProcesosGeneralEntity a where a.productor like :productor ");
q.setParameter("productor", '%'+productor+'%');
List<ProcesosGeneralEntity>resultado=q.getResultList();
List<ProcesosGeneralEntity>result2=new ArrayList<ProcesosGeneralEntity>(resultado);
return result2;
}
答案 0 :(得分:1)
如果我的上述评论是正确的,我将此作为暂定或可能的答案提交。
不同的数据库软件行为略有不同,ANSI SQL Standard并未涵盖SQL的所有行为怪癖,因此字符串中的转义字符之类的内容在实现之间会有所不同。在SQL Server中,使用另一个引号来转义引号,因此要打印字符串“Alice's dog”,需要在SQL中使用字符串'Alice''s dog'
。在Oracle数据库中,转义字符是反斜杠,因此要打印相同的字符串,请改为使用'Alice\'s dog'
。转义字符本身需要能够打印,因此在Oracle数据库中,要打印字符串“R2 \ D2”,您需要输入字符串'R2\\D2'
。
您出现的问题是因为它认为它正在与Oracle数据库通信,因此默认为后一种行为,并使用\\
引用单个{{ 1}},而不是留下它。然后,SQL Server对此选项或类似选项进行了打嗝。老实说,我不确定为什么要把它扔掉。
无论如何,根据OpenJPA手册的4. Database Support - Chapter 4. JDBC部分,您需要指定正确的DBDictionary。 DBDictionary指定在哪些情况下使用转义字符的设置,以及在所有支持的数据库系统中不一致的其他非标准选项。
解决方案似乎是在软件的配置文件中,您必须指定以下内容:
\