【发布时间】:2018-08-21 00:07:53
【问题描述】:
我需要通过 Hibernate 运行一个包,
create or replace PACKAGE BODY "ZIMFUNC" AS
...
FUNCTION ISNUMBER(value IN VARCHAR)
RETURN NUMBER DETERMINISTIC
AS
RC NUMBER;
BEGIN
IF (value IS NULL)
THEN
RETURN 0;
END IF;
RC := TO_NUMBER(value);
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
...
我通过Java方法调用这个包
public Causer criarUsuarioOracle(Causer entity) {
String user = entity.getUserlogin().trim();
try {
executeSql(z.getSql4());
} catch (DaoException e) {
System.out.println("O usuario "+entity.getUserlogin()+" foi criado mas ja existe um user do oracle com esse nome.");
e.printStackTrace();
}
entity.setUsercriabd('S');
return entity;
}
public void executeSql(String sql) throws DaoException {
Transaction t = startTransaction();
try{
getSession().createSQLQuery(sql).executeUpdate();
commitTransaction(t);
}catch(HibernateException e){
rollbackTransaction(t);
e.printStackTrace();
throw e;
}finally{
if (isAutoCommit()) {
getSession().close();
}
}
}
但它给出了以下错误消息。
org.hibernate.QueryException: Space is not allowed after parameter prefix ':' 'create or replace PACKAGE BODY "ZIMFUNC" AS FUNCTION ... (SQL FUNCTION ABOVE) ... END'
at org.hibernate.engine.query.ParameterParser.parse(ParameterParser.java:92)
at org.hibernate.engine.query.ParamLocationRecognizer.parseLocations(ParamLocationRecognizer.java:75)
at org.hibernate.engine.query.QueryPlanCache.buildNativeSQLParameterMetadata(QueryPlanCache.java:149)
at org.hibernate.engine.query.QueryPlanCache.getSQLParameterMetadata(QueryPlanCache.java:79)
at org.hibernate.impl.AbstractSessionImpl.createSQLQuery(AbstractSessionImpl.java:146)
at org.hibernate.impl.SessionImpl.createSQLQuery(SessionImpl.java:1656)
at br.gov.es.dataci.commonshibernate.dao.impl.GenericDao.executeSql(GenericDao.java:484)
at br.gov.es.dataci.controleacesso.persistence.dao.impl.CauserDaoImpl.criarUsuarioOracle(CauserDaoImpl.java:251)
at br.gov.es.dataci.controleacesso.persistence.dao.impl.CauserDaoImpl.main(CauserDaoImpl.java:302)
它理解字符 ':' 需要一个 Hibernate 参数
我在 Java 字符串 (SQL FUNCTION) 中的 ':' 之前插入了两个反斜杠,但错误仍然存在。
谁能帮帮我?
【问题讨论】:
-
请发一个minimal reproducible example,包括调用java代码。和完整的堆栈跟踪。请将这些添加内容放在问题正文中,而不是 cmets 部分。谢谢
-
不要将“SOLVED”放在问题的标题中。 接受解决您问题的答案。这是将问题标记为已解决的唯一方法。接受自己的答案并没有错。