Java 愚蠢的错误o';我的:hibernate SQL抛出无效字符 免责声明:这只是我犯的一个愚蠢的错误。没有关闭它,因为可能其他人做了同样的事情,可能会发现它很有用。

Java 愚蠢的错误o';我的:hibernate SQL抛出无效字符 免责声明:这只是我犯的一个愚蠢的错误。没有关闭它,因为可能其他人做了同样的事情,可能会发现它很有用。,java,hibernate,concatenation,Java,Hibernate,Concatenation,两张表: COR_RADICADO_OFICIO: - num_radicado (pk) - ano_radicado (pk) (我知道,复合pks是邪恶的,但它是一个遗留数据库,不是我的设计;) 及 在hibernate中: createSQLQuery("select * from COR_RADICADO_OFICIO where REQUIERE_RESPUESTA = 399 " + "and concat(concat(num_radicado , '_'), ano_rad

两张表:

COR_RADICADO_OFICIO:
- num_radicado (pk)
- ano_radicado (pk)
(我知道,复合pks是邪恶的,但它是一个遗留数据库,不是我的设计;)

在hibernate中:

createSQLQuery("select * from COR_RADICADO_OFICIO where REQUIERE_RESPUESTA = 399 " +
"and concat(concat(num_radicado , '_'),  ano_radicado) not  in "+ 
"(select concat(concat(num_radicado , '_), ano_radicado) from COR_RESPUESTA_OFICIO);" );
如果我直接在oracle上执行这个查询,它工作得很好,但是hibernate抛出

java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
尝试将“concat”函数替换为“| |”,但出现了相同的错误


有没有办法解决这个问题?(除了创建视图)。

是否尝试删除分号?
您得到的错误并不是说SQL无效,而是说字符无效,这是完全不同的

concat(num_radicado,”)
-打字错误?为什么你认为“复合PK是邪恶的”。是的,这对horse先生来说实际上是一个输入错误:根据我的经验,复合pks是一个后遗症,原因有两个:首先,随着模型的发展,pks中的字段很可能会发生变化。第二,无论何时处理子查询,都必须使用难看的连接技巧,如我的问题中描述的查询,它会严重影响性能,使查询难以阅读和调试。是的,这只是一个输入错误,真正的问题是分号。
java.sql.SQLSyntaxErrorException: ORA-00911: invalid character