我在这个查询中遇到了一个奇怪的问题。 代码:
String[] split = new Double(num).toString().split("\\.")
split[0].length() //num of decimal places
如果" dni"等于:"%"查询正常,但如果" dni"是"%123456789"给出了这个错误
javax.persistence.PersistenceException:Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLException:sql string不是dml语句 错误代码:17129 调用:从VWG_REL_USUARIOS_ZONAS中选择DISTINCT ID_ZONA DNI喜欢'%XX828747B' 查询:DataReadQuery(sql =" SELECT DISTINCT ID_ZONA from VWG_REL_USUARIOS_ZONAS,DNI喜欢'%XX828747B'")
如果我在我的SQL开发人员中复制上面的确切查询,它就像魔术一样。 我已尝试使用" createQuery"与实体和所有的东西,相同的错误。
非常感谢
答案 0 :(得分:0)
尝试将值分配给参数,例如:
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中,仅支持索引参数,不支持命名参数。
答案 1 :(得分:0)
最后我明白了,它现在正在运作。
我正在eclipse中调试模式下改变DNI值,以适应我想做的测试。因此,会话验证器使我的用户失去了一些数据&#34; by magic&#34;以一种奇怪的方式改变了。为了在不进行每次编译的情况下进行测试,我必须在创建会话之前更改DNI值。
我不知道的是,当错误源自验证会话时,它为什么会提供如此具体的SQL异常。像&#34;会话无效&#34;本来可以节省我几个小时......
感谢您的所有时间