更改查询参数时JPA非常奇怪的错误
我在这个查询中遇到了一个奇怪的问题。 代码:更改查询参数时JPA非常奇怪的错误
em2=getNewEntityManager();
(...)
Query query2 = em2.createNativeQuery("SELECT DISTINCT ID_ZONA FROM VWG_REL_USUARIOS_ZONAS WHERE DNI like '"+dni+"'") ;
List <Long> permisos = query2.getResultList();
(...)
如果 “DNI” 等于 “%” 则查询转到正常的,但如果 “DNI” 是 “%123456789” 给出了这样的错误
javax.persistence.PersistenceException:异常[EclipseLink-4002] (Eclipse持久性服务 - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLException:sql字符串不是dml语句 错误代码:17129 调用:SELECT DISTINCT ID_ZONA F ROM VWG_REL_USUARIOS_ZONAS WHERE DNI LIKE '%XX828747B' 查询:DataReadQuery(SQL = “SELECT DISTINCT ID_ZONA FROM VWG_REL_USUARIOS_ZONAS WHERE DNI LIKE '%XX828747B'”)
如果我复制上面的确切查询我的SQL开发人员,它像魔术一样工作。 我试过用实体和所有东西的“createQuery”,同样的错误。
非常感谢
尝试值,比如分配给一个参数,:
String dni = "some value";
Query query2 = em2.createNativeQuery("SELECT DISTINCT ID_ZONA FROM VWG_REL_USUARIOS_ZONAS WHERE DNI like :param") ;
query2.setParamter("param", dni);
List <Long> permisos = query2.getResultList();
更新:在的EclipseLink,只有索引参数支持,命名参数不支持。
非常感谢,但我担心在相同的情况下它会给我带来同样的错误。 :( –
@LuayAbdulraheem原生查询中的命名参数是不可移植的(并且在EclipseLink中不受支持) – crizzis
@crizzis感谢您指出这一点,只有索引参数在EclipseLink中受支持,因此请尝试使用它,而不要使用命名参数。 wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Native –
最后我明白了,它现在正在工作。
我在eclipse中调试模式下改变DNI值,以适应我想要做的测试。因此,会话验证程序使我的用户失效,因为某些“魔术”数据以一种奇怪的方式发生了变化。为了不进行每次编译就进行测试,我必须在创建会话之前更改DNI值。
我不知道为什么当错误发生在验证会话时,它会给出如此特定的SQL异常。喜欢的东西“会是无效的”将有救了我一两个小时......
感谢您的时间
DNI是整数或字符串类型呢? –
字符串类型,西班牙语DNI格式 –