0

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

        }
4

1 回答 1

1

以防我上面的评论是正确的,我将其作为暂定或可能的答案提交。

不同的数据库软件的行为略有不同,ANSI SQL 标准并未涵盖 SQL 的所有行为怪癖,因此字符串中的转义字符之类的内容在实现之间有所不同。在 SQL Server 中,转义引号是用另一个引号完成的,因此要打印字符串“Alice's dog”,需要使用 SQL 中的字符串'Alice''s dog'。在 Oracle 数据库中,转义字符是反斜杠,因此要打印相同的字符串,请改用'Alice\'s dog'. 转义字符本身需要能够打印,所以在Oracle数据库中,要打印字符串“R2\D2”,需要输入字符串'R2\\D2'

您遇到的问题似乎是它认为它正在与 Oracle 数据库交谈,因此默认为后一种行为,并用于\\引用单个\,而不是保留它。SQL Server 然后在这个选项或类似的选项上打了个嗝。老实说,我不确定它为什么把它扔回去。

无论如何,根据 OpenJPA 手册的第4 节。数据库支持 - 第 4 章。JDBC,您需要指定正确的 DBDictionary。DBDictionary 指定设置,例如在哪些情况下使用哪些转义字符,以及在所有支持的数据库系统中不统一的其他非标准选项。

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

<property name="openjpa.jdbc.DBDictionary" value="sqlserver"/>

于 2013-07-18T21:52:28.047 回答