我正在尝试通过使用":"字符的JPA运行本机查询.特定实例在查询中使用MySQL用户变量:
SELECT foo, bar, baz,
@rownum:= if (@id = foo, @rownum+1, 1) as rownum,
@id := foo as rep_id
FROM
foo_table
ORDER BY
foo,
bar desc
Run Code Online (Sandbox Code Playgroud)
JPA代码:
Query q = getEntityManager().createNativeQuery(query, SomeClass.class);
return q.getResultList();
Run Code Online (Sandbox Code Playgroud)
但是,这给了我一个例外,即不允许用空格跟随':'.我已经尝试用反斜杠逃避它们,我已经尝试通过将它们加倍来逃避它们.有没有办法真正做到这一点,还是我是SOL?
我的问题是我尝试在我的查询中插入包含char的文本
我试图在char之前添加双反斜杠//但仍然无效.
ABNORMALLY.java.lang.IllegalArgumentException:
org.hibernate.QueryException: Space is not allowed after parameter prefix ':'
INSERT INTO TABLE_A (A_ID, TYPE_ID, F_ID, REFNO, RECORD) VALUES
( A_ID_SEQ.nextval, 4 , 9 , 'NY167', q'[LA2010167|SNIP' N CLIP|LMG|1.Unit no\\: 1046, 1 st Floor, Limbang Plaza, 98700 Limbang|2010-12-10||]')
Run Code Online (Sandbox Code Playgroud) 我需要在 Hibernate 中使用本机 sql 查询并使用变量。
但是hibernate抛出一个错误说:参数前缀后不允许有空格
所以:= mysql变量赋值和hibernate变量赋值有冲突。
这是我的sql查询:
SET @rank:=0;
UPDATE Rank SET rank_Level=@rank:=@rank+1 ORDER BY Level;
Run Code Online (Sandbox Code Playgroud)
hibernate代码(jpa语法):
Query query = em.createNativeQuery(theQuery);
query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
我无法使用存储过程,因为我的 sql 查询是动态生成的(“Level”可以是“int”或“force”...)
我怎样才能做到这一点 ?
谢谢
我无法使用会话工厂从java hibernate调用我的存储过程
我编写了一个sql过程,它接受5个参数并返回一个在MS SQL studio中正常工作的结果集
EXEC SlaGrid @appID=245,@fromYear=2012,@toYear=2013,@fromMon=1,@toMon=12 --- sql
EXEC SlaGrid @applID=:applID,@fromYear=:fromYear,@toYear=:toYear,@fromMon=:fromMon,@toMon=:toMon --hibernate
Run Code Online (Sandbox Code Playgroud)
我正在设置上述查询的参数
String queryString = "EXEC SlaGrid @applID=:applID,@fromYear=:fromYear,@toYear=:toYear,@fromMon=:fromMon,@toMon=:toMon"
Query query = sessionFactory.getCurrentSession().createSQLQuery(queryString);
//set query parameters here
query.list() --- giving sql grammer exception
Run Code Online (Sandbox Code Playgroud)