在LIKE谓词中指定了无效的转义字符“\\”

时间:2013-07-18 20:09:33

标签: sql sql-server-2008 jpa-2.0 openjpa sql-like

我的查询收到此错误消息..我正在使用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;

        }

1 个答案:

答案 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指定在哪些情况下使用转义字符的设置,以及在所有支持的数据库系统中不一致的其他非标准选项。

解决方案似乎是在软件的配置文件中,您必须指定以下内容:

\